代码(不完整):
list1 = ['1', '2', '3']
list2 = ['a', 'b', 'c']
list3 = ['12' '13' '14']
for list_in in list1:
with open("buffer_file") as f:
for line in f:
if len(line.split(" ")) >= 3:
var1 = line.split(" ")
if var1[0] == list1[0] and var[1] == list2[0] and var[3] == list3[0]:
buffer_file
:
no
priority enabled
1 a 12
2 b 13
3 d 14
pump it
我在这里尝试的是,如果匹配文件行和列表值,则匹配打印文件行。
示例1:
list1[0], list2[0], list3[0]
与包含1 a 12
值的行匹配,因此请打印matched
示例2:
list1[1], list2[1], list3[1]
与包含2 b 13
值的行匹配,因此请打印matched
示例3:
list1[2], list2[2], list3[2]
不匹配,因为包含3 d 12
值的行打印不匹配,并且打印不匹配的元素d
任何人请建议我完成这项工作的最佳方法是什么。我对代码中间感到震惊。
答案 0 :(得分:1)
您可以zip
三个列表,以便您可以抓取并检查其值是对齐元素的三元组。
expected = zip(list1, list2, list3)
print expected
[ ('1', 'a', '12'), ('2', 'b', '13'), ... ]
如果文件中的行与列表元素一对一匹配,则可以再次使用zip()
循环显示预期值和实际值。 zip()
是你的朋友。 (如果文件有额外的行,请使用变量向下走三元组列表。)
with open("buffer_file") as f:
for exp, actual in zip(expected, f):
if exp == actual.split(): # compares two 3-tuples
<etc.>
答案 1 :(得分:0)
在这里读一下这几行。基本上是你要忽略的声音行所有行都不是三元组,枚举文件并在原始列表中找到匹配项。
values = [
['1', '2', '3'],
['a', 'b', 'c'],
['12', '13', '14'],
]
def triples(line):
return len(line.split()) >= 3
with open("test_file.txt") as f:
content = filter(triples, (map(str.strip, f.readlines())))
# Loop over the file keeping track of index
for index, line in enumerate(content):
# Compare split line and triples
if line.split() == list(map(itemgetter(index), values)):
print(line)
给我,“test_file.txt”包含您列出的输入
1 a 12
2 b 13