我是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循环结束时必须处理所有数字。
有没有可以帮助我的图书馆?最好的方法是什么?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
例如,如果您想遍历列表四次,并且每次以不同的顺序遍历列表,都可以使用以下代码
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 --
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)]