gpt4 book ai didi

python - 有没有办法以特定方式订购此列​​表?

转载 作者:太空宇宙 更新时间:2023-11-04 08:27:44 24 4
gpt4 key购买 nike

所以我有这个列表:

[7, 31, 31, 61, 61, 79, 29, 79, 29, 103, 37, 103, 37, 47, 47, 53, 53, 89, 5, 89, 5, 13, 13, 83, 83, 101, 53, 101, 17, 53, 11, 17, 11, 59, 17, 59, 17, 41, 41, 79, 79, 97, 3, 97, 3, 41, 19, 41, 19, 53, 53, 67, 29, 67, 29, 73, 23, 73, 23, 43, 43, 71]

我想知道是否有一种方法可以对它们进行排序,例如一对中的最后一个元素是第二对中的第一个,就像这样:

[7, 31, 31, 61, 61, 79, 79, 29, 29, 103, 103, 37 ....]
[pair1] [pair2] [pair3] [pair4] [pair5] [pair6] ...

有办法吗?

我试过 for 循环,但它的时间复杂度非常高。

这是我的代码:


lis=[7, 31, 31, 61, 61, 79, 29, 79, 29, 103, 37, 103, 37, 47, 47, 53, 53, 89, 5, 89, 5, 13, 13, 83, 83, 101, 53, 101, 17, 53, 11, 17, 11, 59, 17, 59, 17, 41, 41, 79, 79, 97, 3, 97, 3, 41, 19, 41, 19, 53, 53, 67, 29, 67, 29, 73, 23, 73, 23, 43, 43, 71]
for i in range(0, len(lis)-4,4):
if lis[i]==lis[i+2]:
p=lis[i]
lis[i]=lis[i+1]
lis[i+1]=p
elif lis[i]==lis[i+3]:
p = lis[i]
lis[i] = lis[i + 1]
lis[i + 1] = p
p=lis[i+2]
lis[i+2]=lis[i+3]
lis[i+3]=p
elif lis[i+1]==lis[i+3]:
p=lis[i+2]
lis[i+2]=lis[i+3]
lis[i+3]=p
print(lis)

最佳答案

您可以这样做,例如根据原始 list 中的 index 进行排序

>>> x
[7, 31, 31, 61, 61, 79, 29, 79, 29, 103, 37, 103, 37, 47, 47, 53, 53, 89, 5, 89, 5, 13, 13, 83, 83, 101, 53, 101, 17, 53, 11, 17, 11, 59, 17, 59, 17, 41, 41, 79, 79, 97, 3, 97, 3, 41, 19, 41, 19, 53, 53, 67, 29, 67, 29, 73, 23, 73, 23, 43, 43, 71]

# the `sorted` function takes a `key` function, that one can use to manipulate how the sort should be based on
# In this case, you could use `index` of the `element` in the `list` `x`,
# So, while the sort goes through each element, it check against the index in the original list, which is `x, thus it aligns each item based on the `index`.
>>> sorted(x, key=x.index) # note that you have more than a pair, so :)
[7, 31, 31, 61, 61, 79, 79, 79, 79, 29, 29, 29, 29, 103, 103, 37, 37, 47, 47, 53, 53, 53, 53, 53, 53, 89, 89, 5, 5, 13, 13, 83, 83, 101, 101, 17, 17, 17, 17, 11, 11, 59, 59, 41, 41, 41, 41, 97, 97, 3, 3, 19, 19, 67, 67, 73, 73, 23, 23, 43, 43, 71]

如果您真的喜欢,那么,

>>> data = []
>>> for k in sorted(x, key=x.index): # `using direct x.index instead of useless lambda(i previously used) in this case, as @Austin suggested
... if data.count(k) < 2: # add the element until it reaches count 2, which is `pair`, which is what you asked for
... data.append(k)
...
>>> data
[7, 31, 31, 61, 61, 79, 79, 29, 29, 103, 103, 37, 37, 47, 47, 53, 53, 89, 89, 5, 5, 13, 13, 83, 83, 101, 101, 17, 17, 11, 11, 59, 59, 41, 41, 97, 97, 3, 3, 19, 19, 67, 67, 73, 73, 23, 23, 43, 43, 71]

推理:

list.index will return the first matching index. Say you have a list, x = [1,2,1,3] and x.index(1) will always return 0. Thus it will be sorted differently if one use list.index as the keyfunc for sorting

关于python - 有没有办法以特定方式订购此列​​表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55548617/

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