2

我有这个清单:

['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()

但我不知道从这里去哪里?

4

3 回答 3

5

看起来每个人在其下一行都有关联的数据,因此每人有两行数据。你可以zip的。

lst = list(zip(*[iter(lst)]*2))
于 2013-04-15T17:59:18.317 回答
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上的 Python 文档idiom for clustering a data series into n-length groups

我在里面添加了生成器以去除回车符。一旦生成器表达式在那里,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')]
于 2013-04-15T17:59:33.637 回答
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 ')]
于 2013-04-15T19:55:03.850 回答