在列表上使用python2.7 zip返回不同的结果

时间:2014-06-03 21:54:18

标签: python

我很困惑。我在两组列表上执行了zip并获得了不同的结果。我希望经验丰富的专家可以帮助我理解我的思路出错的地方。

s1和s2表示两个短语,总是一到三个单词长。我需要将短语的单词堆叠成列(堆栈底部对齐)。我不明白为什么两次调用zip会返回不同的结果。我使用了repr,两个函数参数看起来都相同。

>>> s1 = 'a b'
>>> s2 = 'c d'
>>> s1.split(' '),s2.split(' ')
(['a', 'b'], ['c', 'd'])

>>> tokens = s1.split(' '),s2.split(' ')
>>> tokens
(['a', 'b'], ['c', 'd'])

>>> zip(s1.split(' '),s2.split(' '))
[('a', 'c'), ('b', 'd')]

>>> zip(tokens)
[(['a', 'b'],), (['c', 'd'],)]

2 个答案:

答案 0 :(得分:1)

在交互式控制台中显示返回的方式会让你失望。

# This calls zip with 2 arguments.
>>> zip(s1.split(' '),s2.split(' '))
[('a', 'c'), ('b', 'd')]

# This calls zip with 1 argument.
>>> zip(tokens)
[(['a', 'b'],), (['c', 'd'],)]

# This unpacks the tuple and calls zip with 2 arguments again,
>>> zip(*tokens)
[('a', 'c'), ('b', 'd')]

答案 1 :(得分:0)

你必须仔细阅读括号:

>>> tokens = s1.split(' '),s2.split(' ')
>>> tokens
(['a', 'b'], ['c', 'd'])

返回值为单个元组,包含两个列表

所以,您将单个元素传递给zip。如果你单独解决这些元素,你会得到

>>> zip(tokens[0], tokens[1])
[('a', 'c'), ('b', 'd')]

>>> zip(*tokens)
[('a', 'c'), ('b', 'd')]