我很困惑。我在两组列表上执行了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'],)]
答案 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')]