我有一个整数列表:l = [1,2,3,4]
对于此列表中的每个元素,我需要随机选择不同的元素并对其执行一些操作:
for i in range(len(l)):
idx = # a random index which is NOT equal to i
# do something with the element at idx
我仍然是Python的新手,并且无法确定是否有办法在不使用循环的情况下执行此操作,我生成随机索引并且仅在随机数不等于{{时停止循环1}}。任何建议都将不胜感激。
答案 0 :(得分:4)
这个怎么样:在 1 0
和N - 1
之间生成一个随机数,在这种情况下N
是列表的长度,然后添加如果它等于或大于i
,则为1。
for i in range(len(l)):
idx = random.randrange(len(l) - 1)
idx = idx + 1 if idx >= i else idx
# do stuff with idx
这样,在i
之上滚动的所有数字都会“向上移动”:
0 i N
before *****************
after ******* **********
或者,在一行中,您可以在 1 i + 1
和N + i
之间生成一个数字,并将该数字设为模N
,从而有效地将其包裹起来在列表结束后:
idx = random.randrange(i + 1, len(l) + i) % len(l)
0 i N
before *****************
after ******* **********
1)这里的含义包括下限和排除上限,使用randrange
答案 1 :(得分:1)
l=[1,2,3,4,5]
import random as rd
def remove_index(list,index):
res=list[:]
res.pop(index)
return res
for i in range(len(l)):
print rd.choice(remove_index(l,i))
答案 2 :(得分:0)
短numpy
方法:
import numpy as np
l = np.array([1,2,3,4])
for i in range(len(l)):
idx = random.choice(np.where(l != l[i])[0])
# do stuff with idx
print(i, idx)
输出(显示指数差异):
0 1
1 2
2 3
3 1
答案 3 :(得分:0)
另一种方法:
Select * from Igralci
group by id, st_tock, st_srecanj, st_nizov, st_gemov
order by st_tock, st_srecanj, st_nizov, st_gemov;
答案 4 :(得分:-1)
import random
l = [1, 2, 3, 4]
for x in l:
new_el = random.choice(l)
while new_el == x:
new_el = random.choice(l)
print new_el