【发布时间】:2014-12-07 00:24:33
【问题描述】:
对于一些数据,例如:
foo = list()
foo.append( ["a", "b", "c"] )
foo.append( ["d", "e", "f"] )
foo.append( ["g", "h", "i"] )
我可以在 Python 2 中使用 map(shuffle, foo) 来打乱 foo 的每个子列表并从 map 中取回一个列表。
在 Python 3 中,map(与许多其他方法一样)返回一个对象,在这种情况下,一个 map 对象包含一些带有值的迭代器(至少这是我的想法)。
所以我尝试了一个列表理解:
[ element for element in map(shuffle, foo) ]
还有列表构造函数:
list( map(shuffle, foo) )
还有一个简单的for循环:
for element in map(shuffle, foo)
但我总是得到这些东西:
[None, None, None]
我不明白为什么?有人可以帮我解决这个问题吗?
除此之外,还有一件奇怪的事:
# simply calling map
map( shuffle, foo ) # <-- does nothing, foo's elements remain in the same order
# saving the output
someThing = map( shuffle, foo ) # <-- foo's elements are shuffled
为什么第一件事不洗牌 foo 的元素,而第二件事呢?
【问题讨论】:
标签: python-2.7 python-3.x map shuffle