python 将一个列表分解为两个列表_将python列表分解成多个列表,分别随机排列每个列表...

Let's say I have posts in ordered list according to their date.

[, , , , , ]

I want to break them into 3 groups, and shuffle the items inside the list accordingly.

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

Now Chunks will return:

[[, ], [, ], [, ]]

What are some efficient ways to randomly shuffle these items inside each respective lists?

I could think of iterating through them, creating each respective lists but this seems repetitive...

I want the final output to look something like:

[[, ], [, ], [, ]]

or better:

[, , , , , ]

解决方案

Sure. random.shuffle works in-place so looping through list elements and applying it on them does the first job.

For the "flattening" I use a favorite trick of mine: applying sum on sublists with start element as empty list.

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

Some results:

['Post: 5', 'Post: 6', 'Post: 4', 'Post: 3', 'Post: 2', 'Post: 1']

['Post: 6', 'Post: 5', 'Post: 3', 'Post: 4', 'Post: 1', 'Post: 2']

(you said you wanted something like [[, , , , , ]] (list in a list) but I suppose that's a typo: I provide a simple, flattened list.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值