【问题标题】:Shuffle function for list in a list列表中列表的随机播放功能
【发布时间】:2019-11-11 10:42:45
【问题描述】:

尝试使用一个枚举函数同时追加两个列表并打乱两个列表的元素

我正在使用两个函数:

  1. 将 list_b 附加到 list_a
  2. 改组 list_a 并使用 enumerate 函数进行索引。

此外,我还想在新的混洗后的 list_a 中混洗 list_b 的元素,并使用相同的 enumerate 函数以相同的数字序列索引两个列表的项目。下面是我到目前为止的位置。

list_a = ["alpha", "beta", "romeo", "nano", "charlie"]
list_b = [1,2,3,4,5,6,7]
from random import shuffle
list_a.append(list_b)
shuffle(list_a)
print(list_a)

for idx, val in enumerate(list_a, start=1):
    print(idx, val)

输出

['nano', 'charlie', 'alpha', 'beta', [1, 2, 3, 4, 5, 6, 7], 'romeo']

1 nano
2 charlie
3 alpha
4 beta
5 [1, 2, 3, 4, 5, 6, 7]
6 romeo

【问题讨论】:

  • 我不确定我是否理解您期望的输出
  • 我希望看到 list_b 的元素也被打乱,然后按数字顺序登记。以预期结果为例 >>[7,1,3,4,5,2,6] 然后枚举函数应显示 1-nano 2-charlie 3-alpha 4-beta 5-7 6-1 7-3 和依此类推。希望这可以澄清

标签: python list random shuffle


【解决方案1】:

试试这个:

# append
from random import sample, shuffle
list_a.append(list_b)

# shuffle the list within the list
for i, v in enumerate(list_a): 
     if isinstance(v, list):
          list_a[i] = sample(v, len(v))

# shuffle the list
list_a = sample(list_a, len(list_a))

# unpack elements
list_c = []
for e in list_a:
    if not isinstance(e, list):
        list_c.append(e)
        continue
    for v in e: 
        list_c.append(v)

# print
for i, v in enumerate(list_c): 
    print(i, v)

【讨论】:

  • 欢迎投票,并使用我的回答作为您问题的专用答案:)
【解决方案2】:

我可能遗漏了一些东西,但您可以在将 list_b 附加到 list_a 之前将其改组:

from random import shuffle

list_a = ["alpha", "beta", "romeo", "nano", "charlie"]
list_b = [1, 2, 3, 4, 5, 6, 7]

shuffle(list_b)

list_a.append(list_b)
shuffle(list_a)
print(list_a)

for idx, val in enumerate(list_a, start=1):
    print(idx, val)

输出

['alpha', 'charlie', 'nano', [1, 4, 5, 2, 7, 3, 6], 'beta', 'romeo']
1 alpha
2 charlie
3 nano
4 [1, 4, 5, 2, 7, 3, 6]
5 beta
6 romeo

【讨论】:

    【解决方案3】:

    您可以通过基本概念if-else AND type 方法轻松获得结果。我在您的代码中添加了 2 行:-

    list_a = ["alpha","beta","romeo","nano","charlie"]
    list_b = [1,2,3,4,5,6,7]
    from random import shuffle
    list_a.append(list_b)
    shuffle(list_a)
    print(list_a)
    print()
    
    for idx, val in enumerate(list_a, start=1):
        if type(val) is list:   # This is newly added.
            shuffle(val)
            print(idx, val)
        else:   
            print(idx, val)
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2012-03-11
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 2014-04-02
      • 2010-12-21
      • 1970-01-01
      相关资源
      最近更新 更多