解压列表理解中的拆分

And*_*rai 5 python split list

如果我想根据文档行的元素生成元组列表,我可以这样做:

[(line.split()[0], line.split()[-1][3:8]) for line in open("doc.txt")]  
Run Code Online (Sandbox Code Playgroud)

例如(我添加了切片以表明我可能想对分割的元素使用一些操作)。

尽管如此,我还是想避免使用两次 split,因为那样效率低下。
所以我想使用诸如解包之类的东西

[(linesplit0, linesplit1[3:8]) for line in open("doc.txt") for (linesplit0, linesplit1) in line.split()]  
Run Code Online (Sandbox Code Playgroud)

但这是行不通的,因为拆分中没有元组,因此在拆分的每个元素中我们将缺少一个元素。

我想要的是允许对分割结果的列表使用占位符名称(如 splittedlist 或其他),并且可以与索引(splittedlist[0])或解包或两者一起使用,这将与理解列表语法兼容。

可行吗?

Net*_*ave 4

您可以使用map(python3) 或itertools.imap(python2) 来打开:

[(line[0], line[-1][3:8]) for line in map(str.split, open("doc.txt"))]
Run Code Online (Sandbox Code Playgroud)

或使用生成器:

[(line[0], line[-1][3:8]) for line in ( l.split() for l in open("doc.txt"))]  
Run Code Online (Sandbox Code Playgroud)