【问题标题】:Shuffling pairs in lists of lists在列表列表中洗牌对
【发布时间】:2020-03-02 05:36:41
【问题描述】:

给定一个列表列表如下:

aList = [["1","Number1", "2", "Number2","3","Number3", "4", "Number4"],["3","Number3", "1", "Number1","2","Number2", "4", "Number4"]]

我正在尝试对子列表中的每两个元素进行洗牌,以获得类似的东西,例如:

aListNew = [["3","Number3", "1", "Number1","4","Number4", "2", "Number2"],["2","Number2", "3", "Number3","1","Number1", "4", "Number4"]]

因此,在洗牌时,两个连续的字符串保持在一起很重要。

【问题讨论】:

  • 我认为"Number5" 条目是错字?
  • @MarkDickinson 非常感谢!现在是正确的
  • 有什么理由保留这个数据结构吗?如果数据是成对的,那么明确地成对地构造它会更清晰,例如使用元组。这也将简化下一步。
  • 是的,这个结构很重要。但也许有一个使用元组和向后转换的解决方案。
  • 您可以将int 随机化,然后在int 后面添加string,这样它就会保持配对状态。

标签: python-3.x list random shuffle


【解决方案1】:

有很多方法可以做到这一点。您没有说明您尝试了什么或为什么它不起作用。尽管如此,由于这个问题尚未得到回答或关闭,这里有一些代码。请查看发布指南,以便您以后发布的帖子会产生更多答案并且不太可能被关闭。

import random

aList = [["1","Number1", "2", "Number2","3","Number3", "4", "Number4"],["3","Number3", "1", "Number1","2","Number2", "4", "Number4"]]
alist_alt = []

for sublist in aList:
    l = len(sublist)
    r = list(range(0, l ,2))
    random.shuffle(r)

    sublist_alt=[]
    for i in r:
        sublist_alt.append(sublist[i])
        sublist_alt.append(sublist[i+1])

    alist_alt.append(sublist_alt)

print(alist_alt)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多