我有这个清单:
['Ben\n', '5 0 0 5 -5 \n', 'Moose\n', '5 5 0 3 0 0 \n', ...]
长期以来一直这样。我需要将此列表放入这样的元组列表中:
[('Ben', '5 0 0 5 -5'), ('Moose', '5 5 0 3 0 0'), ...] and so on.
我觉得这应该很容易。
我已经打开了文本文件并将其拆分为一个列表:
e = open("bookratings.txt", "r")
elines = e.readlines()
但我不知道从哪里去?
答案 0 :(得分:5)
看起来每个人在下一行都有相关数据,因此每人产生两行数据。
你可以zip
。
lst = list(zip(*[iter(lst)]*2))
答案 1 :(得分:3)
你走了:
>>> li=['Ben\n', '5 0 0 5 -5 \n', 'Moose\n', '5 5 0 3 0 0 \n']
>>> zip(*[(e.strip() for e in li)]*2)
[('Ben', '5 0 0 5 -5'), ('Moose', '5 5 0 3 0 0')]
zip(*[iter(s)]*n)
部分基于zip上idiom for clustering a data series into n-length groups
的{{1}}上的Python文档。
我在里面添加了发电机以去除回车。生成器表达式出现后,不再需要iter
。 (谢谢@StevenRumbalski)
当然,你提到你有像这样的文件这样的文件:
Ben
5 0 0 0 -5
Moose
5 5 0 3 0 0
...
如果是这样,这里有一个替代方案,您不必阅读整个文件:
>>> with open('/tmp/lines.txt','r') as f:
... it=iter(f)
... li=[(i.strip(),it.next().strip()) for i in it]
...
>>> li
[('Ben', '5 0 0 0 -5'), ('Moose', '5 5 0 3 0 0')]
答案 2 :(得分:0)
尝试
>>a = ['Ben\n', '5 0 0 5 -5 \n', 'Moose\n', '5 5 0 3 0 0 \n']
>>b = ''.join(a).split('\n')
现在
>> c = [(b[i],b[i+1]) for i in range(0,len(b)-1,2)]
应该给你结果
[('Ben', '5 0 0 5 -5 '), ('Moose', '5 5 0 3 0 0 ')]