我试图实现一个“I not equal to j”(i<j
)循环,它跳过了i = j
的情况,但是我想进一步提出一个额外的要求,即如果已经完成了(i,j)
的排列,循环就不会重复(j,i)
的排列(因为,由于对称性,这两种情况给出了相同的解决方案)
在下面的代码中,我通过迭代以下列表来进行i<j
循环,其中第二个列表只是前滚的第一个列表1:
mylist = ['a', 'b', 'c']
np.roll(mylist,2).tolist() = ['b', 'c', 'a']
下面代码生成的序列不是我想要的:
import numpy as np
mylist = ['a', 'b', 'c']
for i in mylist:
for j in np.roll(mylist,2).tolist():
print(i,j)
由于它返回一个重复的a a
,并且具有重复的a b
和b a
排列:
a b
a c
a a
b b
b c
b a
c b
c c
c a
所需的序列应该是mylist
中元素的成对组合,因为对于N=3
元素,应该只有N*(N-1)/2 = 3
对可以循环:
a b
a c
b c
您可以使用
list.insert
来帮助进行左移和右移list.pop
,从原始列表中删除元素并返回它list.insert
将返回的元素添加到给定索引处的列表中(本例中为0或-1)。注意:此操作已就位更好的方法是使用
collections.deque
。这将允许您使用多个班次,并且还可以使用其他一些整洁的队列功能编辑:根据您的评论,您正在尝试获得排列-
或
只需删除第一个元素并附加它,您就可以使用相当粗糙的方法来实现这一点:
其中
.append(...)
将一个元素附加到列表的末尾,而.pop(...)
将从给定索引中删除一个元素并返回它相关问题 更多 >
编程相关推荐