以不同的索引顺序创建 5 个包含 5 个相同元素的列表

问题描述 投票:0回答:2

我正在努力解决一个看起来如此基本的问题,但却让我发疯,因为我仍然无法实现。

交易如下: 例如,我有一个包含 5 个元素的列表:

['A', 'B', 'C', 'D', 'E']

我想要列表中的元素,以便每个列表在不同索引处包含相同的元素。例如,元素“A”在每个列表中将具有不同的索引位置。它应该是随机的,以便每次运行代码时,我仍然有不同的列表。

像这样:

['A', 'B', 'C', 'D', 'E']
['C', 'D', 'E', 'A', 'B']
['B', 'C', 'D', 'E', 'A']
['E', 'A', 'B', 'C', 'D']
['D', 'E', 'A', 'B', 'C']

我尝试使用itertools,我尝试使用if语句进入for循环进入for循环,但显然它不起作用......我觉得解决方案很简单,但我错过了一些东西。

python list permutation randomized-algorithm
2个回答
0
投票
import random

original_list = ['A', 'B', 'C', 'D', 'E']

# Number of lists you want to generate:
num_lists = 5

# Generate and print the shuffled lists:
for i in range(num_lists):
    shuffled_list = original_list.copy()
    random.shuffle(shuffled_list)
    print(shuffled_list)

您可以根据您想要的列表数量更改代码。


0
投票

您可以使用

collections.deque
为此:

from collections import deque

d = deque('ABCDE')

for _ in range(len(d)):
    print(d)
    d.rotate()

deque(['A', 'B', 'C', 'D', 'E'])
deque(['E', 'A', 'B', 'C', 'D'])
deque(['D', 'E', 'A', 'B', 'C'])
deque(['C', 'D', 'E', 'A', 'B'])
deque(['B', 'C', 'D', 'E', 'A'])

要随机化,您需要打乱最终结果:

import random

lists = []

for _ in range(len(d)):
    lists.append(list(d))
    d.rotate()

random.shuffle(lists)
© www.soinside.com 2019 - 2024. All rights reserved.