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)
我同意贾斯汀的观点,而不是使用zip是个好主意。问题是如何将数据放入两个不同的列表中。这是一个可行的建议。在
更新
经过保罗的建议,有轻微的改善。我确信列表理解是相当不符合语法的,因为它利用了}的事实,因此
list.append
返回{append
两个表达式都将被求值,None
值的列表将被构造并立即丢弃。在假设您将名称读入一个列表,然后将值读入另一个列表。一旦有了
names
和values
列表,您可以执行以下操作:result
现在是值不是“na”的所有名称的列表。在相关问题 更多 >
编程相关推荐