如果我想根据文档行的元素生成一个元组列表,我可以做:
[(line.split()[0], line.split()[-1][3:8]) for line in open("doc.txt")]
例如(我添加了切片以表明我可能想在拆分元素上使用一些操作(。
我仍然想避免使用两次分裂,因为那是不效率的。
所以我想用
[(linesplit0, linesplit1[3:8]) for line in open("doc.txt") for (linesplit0, linesplit1) in line.split()]
但由于分裂中没有元素,所以这是无法工作的,因此在分裂的每个元素中,我们将缺少一个元素。
我想要的是允许将占位符名称用于拆分产生的列表(例如splittedList或erthing(,并且可以与索引(splittedList [0](或两者一起使用(,这将与理解列表语法兼容。
是可行的吗?
您可以在开放中使用 map
(python3(或 itertools.imap
(python2(:
[(line[0], line[-1][3:8]) for line in map(str.split, open("doc.txt"))]
或使用发电机:
[(line[0], line[-1][3:8]) for line in ( l.split() for l in open("doc.txt"))]
您可以将map
与Unbound方法str.split
:
[(linesplit[0], linesplit[-1][3:8]) for linesplit in map(str.split, open("doc.txt"))]
但是我会远离这些;相反,我会使用发电机:
def read_input(filename):
with open(filename) as f:
for line in f:
parts = line.split()
yield parts[0], parts[-1][3:8]
它可能要多一些,但是更容易遵循 - 可读性计数 - 并且用户可以选择使用read_input('doc.txt')
,或在需要时将其包装到列表中。