在python中从列表中删除值

2024-05-03 23:32:23 发布

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

我有一个大文件,文件中的名称和值用空格隔开:

name1 name2 name3....

在长长的名称列表后面是与这些名称相对应的值列表。值可以是0-4或na。我要做的是合并数据文件,并在值为na时删除所有名称和值。在

例如,此文件中的最后一行名称如下:

namenexttolast nameonemore namethelast 0 na 2

我想要以下输出:

namenexttolast namethelast 0 2

如何使用Python实现这一点?在


Tags: 文件名称列表数据文件空格naname1name2
3条回答

我同意贾斯汀的观点,而不是使用zip是个好主意。问题是如何将数据放入两个不同的列表中。这是一个可行的建议。在

reader = open('input.txt')
writer = open('output.txt', 'w')
names, nums = [], []
row = reader.read().split(' ')
x = len(row)/2
for (a, b) in [(n, v) for n, v in zip(row[:x], row[x:]) if v!='na']:
    names.append(a)
    nums.append(b)
writer.write(' '.join(names))
writer.write(' ')
writer.write(' '.join(nums))
#writer.write(' '.join(names+nums)) is nicer but cause list to be concat
s = "name1 name2 name3 v1 na v2"
s = s.split(' ')
names = s[:len(s)/2]
values = s[len(s)/2:]

names_and_values = zip(names, values)
names, values = [], []
[(names.append(n) or values.append(v)) for n, v in names_and_values if v != "na"]
names.extend(values)

print ' '.join(names)

更新

经过保罗的建议,有轻微的改善。我确信列表理解是相当不符合语法的,因为它利用了list.append返回{}的事实,因此append两个表达式都将被求值,None值的列表将被构造并立即丢弃。在

假设您将名称读入一个列表,然后将值读入另一个列表。一旦有了namesvalues列表,您可以执行以下操作:

result = [n for n, v in zip(names, values) if v != 'na']

result现在是值不是“na”的所有名称的列表。在

相关问题 更多 >