如何在Python中引用/迭代多个列表

2024-09-30 04:28:23 发布

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

我对这个问题的所有回答要么是短路,要么不是纯粹的Python。你知道吗

如果我有几个清单:

audcad = ["audcad",0,0,0,0,0,0,0,0,0,0,0,0,0]
audchf = ["audchf",0,0,0,0,0,0,0,0,0,0,0,0,0]
audjpy = ["audjpy",0,0,0,0,0,0,0,0,0,0,0,0,0]

ccys = ["audcad", "audchf", "audjpy"]

以下代码应阐明我的意图:

for ccy in ccys:
    ccy[13] += 10

应导致:

audcad = ["audcad",0,0,0,0,0,0,0,0,0,0,0,0,10]
audchf = ["audchf",0,0,0,0,0,0,0,0,0,0,0,0,10]
audjpy = ["audjpy",0,0,0,0,0,0,0,0,0,0,0,0,10]

因为我正在使用字符串对象引用:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
IndexError: string index out of range

我不想为此使用numpy,因为我要部署到一个我希望尽可能少安装的服务器上,所以代码需要尽可能的pythonic。如何在任意列表上循环以填充和读取每个列表中的特定元素?你知道吗

我认为像数组列表这样的2D对象可能是更好的解决方案,但是我仍然需要如何迭代对象,而不必使用大型if语句和单独的数组名称列表(请注意hacky SA)。你知道吗


Tags: 对象字符串代码in列表for数组意图
3条回答

如果出于某种原因,您实际上必须使用字符串,则可以使用局部变量:

audcad = ["audcad",0,0,0,0,0,0,0,0,0,0,0,0,0]
audchf = ["audchf",0,0,0,0,0,0,0,0,0,0,0,0,0]
audjpy = ["audjpy",0,0,0,0,0,0,0,0,0,0,0,0,0]

ccys = ["audcad", "audchf", "audjpy"]

for ccy in ccys:
    locals()[ccy][13] += 10

如果您想通过名称进行访问,那么您可能是一个很好的例子,可以从列表中创建一个dict,使用第一个元素作为名称:

 dct = {l[0]: l for l in (audcad,audjpy,audchf)}

当你这样做的时候-

ccys = ["audcad", "audchf", "audjpy"]

您将字符串(如"audcad")放入列表中,而不是将列表放入ccys列表中。把名单放在那里你应该-

ccys = [audcad, audchf, audjpy]

列表ccys应该包含其他列表变量本身(浅表副本),而不是字符串形式的名称

ccys = [audcad, audchf, audjpy]

那么你的代码就可以正常工作了

for ccy in ccys:
    ccy[13] += 10

>>> audcad
['audcad', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10]
>>> audchf
['audchf', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10]
>>> audjpy
['audjpy', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10]

相关问题 更多 >

    热门问题