使用列表名称作为字符串访问lis

2024-09-28 23:28:48 发布

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

我有一个包含数据的文件,我想根据第一列中的值将其分为不同的列表。我确切地知道第一列中可能的值是什么,但它们不是一个很好的数学级数。有没有一种较短的方法来编写以下代码?你知道吗

x0=[]
y0=[]
x2=[]
y2=[]
x16=[]
y16=[]
# etc.

for line in file:
    words=line.split()
    if words[0] == '0':
        x0.append(words[1])
        y0.append(words[2])
    elif words[0] == '2':
        x2.append(words[1])
        y2.append(words[2])
    elif words[0] == '16':
        x16.append(words[1])
        y16.append(words[2])
    # etc.

我的思考过程如下,但我定义的字符串(x和y)显然是字符串,并没有引用我希望它们引用的列表。你知道吗

x0=[]
y0=[]
x2=[]
y2=[]
x16=[]
y16=[]
# etc

for line in file:
    words=line.split()
    x='x'+words[0]
    y='y'+words[0]
    x.append(words[1])
    y.append(words[2])

更新:我意识到用字典可以做到这一点,我的值是一个列表列表,但主要是我很好奇是否有一个pythonic的方法来编码这个,遵循我的思路如上所述。你知道吗


Tags: 方法in列表forlineetcfilewords
3条回答

使用^{}而不是一堆单独的值。你知道吗

from collections import defaultdict
extracted_values = defaultdict(list)
for line in file:
    words = line.split()
    extracted_values['x' + words[0]].append(words[1])
    extracted_values['y' + words[0]].append(words[2])

然后只需通过字典键而不是变量名来访问值。你知道吗

extracted_values['x0']
extracted_values['y1']

我建议你转身

x0=[]
x2=[]
x16=[]

在一本字典中:

x={'0':[], '2':[], '16':[]}

然后可以将各个列表引用为x['0']x['2']

特别是,您可以像这样重写for循环:

for line in file:
    words = line.split()
    x[words[0]].append(words[1])
    y[words[0]].append(words[2])

有些人会大喊大叫,但我还是不明白他们为什么不赞成使用globals()

for line in file:
    words=line.split()
    zx,zy = 'x%d' % words[0], 'y%d' % words[0]
    if zx not in globals():
        globals()[zx] = []
        globals()[zy] = []
    globals()[zx].append(words[1])
    globals()[zy].append(words[2])

相关问题 更多 >