【问题标题】:How to shuffle a copied list without shuffling the original list?如何在不打乱原始列表的情况下打乱复制的列表?
【发布时间】:2018-05-24 20:21:09
【问题描述】:

我正在使用 python 并想将我之后写入的复制列表打乱到 txt 文件中(请参阅下面的代码)。

为什么 shuffle 函数也会随机化原始列表?我只将副本用于函数调用。

有什么想法吗?谢谢!

from random import shuffle

def shuffleList2txt(myList):
    shuffle(myList)

    f = open('randList.txt','w')
    f.write(str(liste))
    f.close()

    return(myList)


liste = [1,2,3,4,5,6,7,8,9,10]
copy = liste
shuffledList = shuffleList2txt(copy)

liste 和 shuffledList 是一样的!为什么? liste 应该是原始列表,而 shuffledList 应该是 shuffled 列表.... :)

【问题讨论】:

  • 不确定您之前是否阅读过this,但我认为了解您的情况是件好事。
  • 您和您的伴侣养了一只狗。你称她为“Jo”,而你的伴侣称她为“Krok”,现在你的伴侣打电话给美容服务来修剪 Krok 的头发,你是否期望当你回到家时,Jo 的头发仍然很长?列表对象虽然以两种不同的方式命名,但仍然是同一条老狗!请参考this question(或有关该主题的数十个答案中的任何一个)来解决此问题。
  • 哈哈...感谢 gboffi 的精彩解释 :)

标签: python list shuffle


【解决方案1】:

random.shuffle 可以正常工作。当然,您可以在洗牌之前复制一份列表,但最好使用random.sample,通过对整个列表进行抽样...:

>>> l = [1,2,3,4]
>>> random.sample(l,len(l))
[3, 1, 2, 4]
>>> l
[1, 2, 3, 4]

因此,分配 random.sample 的结果会为您提供一个新的随机列表,而不会更改原始列表。

【讨论】:

  • 恭喜答错题!
  • 谢谢让-弗朗索瓦!你展示了一个很好的解决方案!我还检查了其他主题并了解了克隆列表的问题。
  • 是的,我不确定它是否重复,因为当您可以在一行中完成时,先复制列表然后应用就地改组似乎很笨拙。跨度>
猜你喜欢
  • 2019-11-29
  • 2021-01-10
  • 2012-04-03
  • 1970-01-01
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多