将python列表分成多个列表,分别对每个列表进行洗牌

时间:2016-09-15 21:42:20

标签: python list shuffle

假设我根据日期在有序列表中发帖。

[<Post: 6>, <Post: 5>, <Post: 4>, <Post: 3>, <Post: 2>, <Post: 1>]

我想将它们分成3组,并相应地对列表中的项目进行洗牌。

chunks = [posts[x:x+2] for x in xrange(0, len(posts), 2)]

现在Chunks将回归:

[[<Post: 6>, <Post: 5>], [<Post: 4>, <Post: 3>], [<Post: 2>, <Post: 1>]]

在每个相应列表中随机随机播放这些项目有哪些有效方法? 我可以考虑迭代它们,创建每个相应的列表,但这似乎是重复的......

我希望最终输出看起来像:

[[<Post: 5>, <Post: 6>], [<Post: 4>, <Post: 3>], [<Post: 1>, <Post: 2>]]

或更好:

[<Post: 5>, <Post: 6>, <Post: 4>, <Post: 3>, <Post: 1>, <Post: 2>]

1 个答案:

答案 0 :(得分:1)

不确定。 ValueError: Length of values does not match length of index就地工作,因此循环遍历列表元素并将其应用于第一个作业。 对于“扁平化”,我使用了我最喜欢的技巧:在子列表上应用random.shuffle,将start元素作为空列表。

sum

一些结果:

import random,itertools

chunks = [["Post: 6", "Post: 5"], ["Post: 4", "Post: 3"], ["Post: 2", "Post: 1"]]

# shuffle

for c in chunks: random.shuffle(c)

# there you already have your list of lists with shuffled sub-lists
# now the flattening

print(sum(chunks,[]))                  # or (more complex but faster below)
print(list(itertools.chain(*chunks)))  # faster than sum on big lists

(你说你想要['Post: 5', 'Post: 6', 'Post: 4', 'Post: 3', 'Post: 2', 'Post: 1'] ['Post: 6', 'Post: 5', 'Post: 3', 'Post: 4', 'Post: 1', 'Post: 2'] 之类的东西(在列表中列出),但我认为这是一个错字:我提供了一个简单,扁平的列表。