gpt4 book ai didi

python - 排列和索引,python

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:31:01 24 4
gpt4 key购买 nike

我创建了一个列表,其中包含 0,1,2 的所有排列

perm = list(itertools.permutations([0,1,2]))

这用于按特定顺序访问另一个列表中的索引。每次访问索引时,都会将其弹出。当一个元素被弹出时,索引高于弹出元素索引的元素将向下移动一个位置。这意味着如果我想按索引 [0,1,2] 从我的列表中弹出它会导致索引错误,因为当我到达它时索引 2 将不存在。因此,[0,1,2] 应该按 [0,0,0] 的顺序弹出。

更多的例子是

[0,2,1] = [0,1,0]
[2,0,1] = [2,0,0]
[1,2,0] = [1,1,0]

现在这正在通过一系列检查来处理,我的问题是是否有人知道将 itertools 生成的列表列表转换为所需列表的聪明方法:

[(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
[(0, 0, 0), (0, 1, 0), (1, 0, 0), (1, 1, 0), (2, 0, 0), (2, 1, 0)]

最佳答案

简单地遍历每个元组,并递减大于该元素的每个后续索引的索引:

l=[(0, 1, 2), (0, 2, 1), (1, 0, 2), (1, 2, 0), (2, 0, 1), (2, 1, 0)]
def lower_idxs(lst):
new_row = list(lst)
for i, val in enumerate(new_row):
for j in xrange(i+1, len(new_row)):
if new_row[i] < new_row[j]:
new_row[j] -= 1
return new_row

print [lower_idxs(x) for x in l]

会打印出来

[[0, 0, 0], [0, 1, 0], [1, 0, 0], [1, 1, 0], [2, 0, 0], [2, 1, 0]]

这是一个基于 Randy C 解决方案的更高级的单行代码:

print [tuple(y-sum(v<y for v in x[:i]) for i,y in enumerate(x)) for x in l]

关于python - 排列和索引,python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33371212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com