如何在动态列表中添加Python项?

2024-04-16 18:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python还不熟悉,也许这听起来不符合逻辑,但我如何才能让它工作:

p1=(20,50)
p2=(70,80)
p3=(100,140)
listP=[]
#listP=[p1,p2,p3] #manually it works
for i in range(3):
    listP.append('p'+str(i))

结果应该是点列表,而不是(p1、p2等) 提前多谢了!你知道吗


Tags: in列表forrangeit逻辑manuallyp2
3条回答

如果您想使用变量名作为字符串来访问变量,可以使用locals()vars()(感谢@Wingston Sharon这样做):

# Using locals()
for i in range(3):
    listP.append(locals()['p' + str(i)])

# Using vars()
for i in range(3):
    listP.append(vars()['p' + str(i)])

在您的示例中,p1, p2, p3标识符,但是在for循环中,您将这些标识符的名称作为字符串添加到列表中。因此,您将获得字符串列表,而不是与这些字符串匹配的标识符的取消引用值列表。这种行为是有意的,也是需要的。你知道吗

标识符是代码中用来访问它们引用的值的命名句柄。一般来说,没有任何编程语言会自动将可能与某些本地标识符匹配的字符串转换为实际引用,因为在大多数情况下这是意外行为。考虑范围和安全性。你知道吗

通常,不应尝试将字符串转换为标识符。在python中,可以使用getattr。不过,我不在这里概述这一点,因为您不应该这样做。你知道吗

对于您的案例,更好的方法是直接在listdict结构中实例化您的点:

# List:
plist = [(20, 50), (70, 80), (100, 140)]

# Dict:
pdict = {
    'p1': (20, 50),
    'p2': (70, 80),
    'p3': (100, 140)
}

在这些情况下,您可以按如下方式访问您的点:

# For list case:
for i in range(3):
    print(plist[i])

# For dict case:
for i in range(3):
    print(pdict['p{:d}'.format(i)])

您可以使用vars()

for i in range(1,4):
    listP.append(vars()['p'+str(i)])

相关问题 更多 >