对于具有随机索引的循环

2024-04-18 21:31:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

list = [ 10 , 20 , 30 , 40 ]

我遍历所有的循环,在每个循环中,我更改正在处理的数字。一个例子是将数字10改为任何我喜欢的其他数字(它甚至可能是randint()的结果)。然而,数字的处理在这里并不重要,而是我遍历列表的方式。你知道吗

迭代的一个简单方法是对循环使用

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)中,索引可以不重复,因此,必须在for循环结束时处理所有数字。你知道吗

有什么图书馆可以帮助我吗?最好的方法是什么?你知道吗


Tags: 方法in示例列表for顺序order数字
3条回答

根据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)]

您可以使用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

你可以使用numpy.random.permutation

例如,如果要遍历列表4次,每次都按不同的顺序遍历,可以使用以下代码

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

相关问题 更多 >