在Python中避免变量作为变量或列表名

2024-09-28 21:25:53 发布

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

我想读入一些具有以下结构的文本文件:

3 560
7 470
2 680
4 620
3 640
...

第一列是行为实验的条件,第二列是反应时间。我想做的是为每个条件创建一个数组/列表,其中只包含该条件的反应时间。我以前用过Perl。由于有许多不同的条件,我希望避免编写许多单独的elsif语句,因此在数组名称中使用了条件名称:

^{2}$

例如,创建如下数组:

@condition3 = (560, 640,...);

当我对Python感兴趣时,我想看看如何使用Python实现这一点。我发现了一些不鼓励在变量名中使用变量的答案,但不得不承认,从这些答案中,我无法得出如何创建如上所述的列表,而不对每个条件恢复单独的elif。有办法吗?如有任何建议,我们将不胜感激!在

托马斯


Tags: 答案名称列表数组语句条件结构感兴趣
3条回答

这是字典的完美应用程序,类似于Perl哈希:

data = {}
with open('data.txt') as f:
    for line in f:
        try:
            condition, value = map(int, line.strip().split())
            data.setdefault(condition, []).append(value)
        except Exception:
            print 'Bad format for line'

现在,您可以通过索引data来访问不同的条件:

^{pr2}$

字典是一个很好的方法。试试这样的方法:

from collections import defaultdict

conditions = defaultdict(list)

for cond, rt in data:
    conditions[cond].append(rt)

下面的代码使用您描述的格式读取文件data.txt,并使用每个实验的反应时间计算字典:

experiments = {}
with open('data.txt', 'r') as f:
    data = [l.strip() for l in f.readlines()]
for line in data:
    index, value = line.split()
    try:
        experiments[int(index)].append(value)
    except KeyError:
        experiments[int(index)] = [value]
print experiments
# prints: {2: ['680'], 3: ['560', '640'], 4: ['620'], 7: ['470']}

现在可以使用experiments[2]experiments[3]等来访问每个实验的反应时间。在

相关问题 更多 >