对于具有随机索引的循环

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

我是python的新手,我正在写一个简单的脚本,其中在列表中给出4个整数:

list = [ 10 , 20 , 30 , 40 ]

我遍历所有这些,并且在每个周期中,我更改要处理的数字。一个例子是将数字10更改为any其他数字(甚至可能是randint()的结果)。但是,这里的数字处理并不重要,而是我遍历列表的方式。

一种简单的迭代方法是使用for cycle

for i in list:

for x in range(3):
    print(list[x])

但是,我要解决的问题是我不知道它是否可以在python中使用。

我想遍历列表中的所有数字,当我修改最后一个数字(N)时,我想再次开始for循环,但顺序不同。

示例(带有索引):

# first 4 cycles
order = 0 - 1 - 2 - 3

# second 4 cycles
order = 0 - 2 - 3 - 1

# third 4 cycles
order = 2 - 1 - 0 - 3

(...)

这意味着将按照以下示例顺序对整数进行处理:

# first 4 cycles
order = 10 - 20 - 30 - 40

# second 4 cycles
order = 10 - 30 - 40 - 20

# third 4 cycles
order = 20 - 30 - 10 - 40

(...)

请注意,在4个连续周期(N)中,可能会重复索引[[no,因此,在for循环结束时必须处理所有数字。

有没有可以帮助我的图书馆?最好的方法是什么?
python
3个回答
3
投票
您可以使用random.shuffle就地随机播放列表。

import random list = [10, 20, 30, 40] for i in range(5): random.shuffle(list) print('Cycle:') for x in list: print(x)

给予:

Cycle: 40 30 10 20 Cycle: 10 40 30 20 Cycle: 20 10 30 40 Cycle: 30 40 20 10 Cycle: 40 10 20 30

这将更改原始列表的顺序,因此,如果要保留,则应复制它的副本:

import random list = [10, 20, 30, 40] scratch_list = list[:] # shallow copy the list for i in range(5): random.shuffle(scratch_list) print('Cycle:') for x in scratch_list: print(x) # original list is still 10, 20, 30, 40 # scratch list is in random order


1
投票
您可以使用numpy.random.permutation

例如,如果您想遍历列表四次,并且每次以不同的顺序遍历列表,都可以使用以下代码

import numpy as np your_list = [10, 20, 30, 40] for i in range(4): for j in np.random.permutation(len(your_list)): print(your_list[j], end=' -- ') print()

将为您带来以下结果

40 -- 10 -- 20 -- 30 -- 30 -- 10 -- 40 -- 20 -- 30 -- 10 -- 20 -- 40 -- 40 -- 20 -- 30 -- 10 --


0
投票
根据OP的评论,获取此列表的所有可能组合的方法如下(使用itertools:]

from itertools import permutations temp_list = [ 10 , 20 , 30 , 40 ] [*permutations(temp_list)]

输出如下:

[(10, 20, 30, 40), (10, 20, 40, 30), (10, 30, 20, 40), (10, 30, 40, 20), (10, 40, 20, 30), (10, 40, 30, 20), (20, 10, 30, 40), (20, 10, 40, 30), (20, 30, 10, 40), (20, 30, 40, 10), (20, 40, 10, 30), (20, 40, 30, 10), (30, 10, 20, 40), (30, 10, 40, 20), (30, 20, 10, 40), (30, 20, 40, 10), (30, 40, 10, 20), (30, 40, 20, 10), (40, 10, 20, 30), (40, 10, 30, 20), (40, 20, 10, 30), (40, 20, 30, 10), (40, 30, 10, 20), (40, 30, 20, 10)]

© www.soinside.com 2019 - 2024. All rights reserved.