gpt4 book ai didi

python - 使用二进制值对列表进行排序

转载 作者:行者123 更新时间:2023-12-04 02:35:02 25 4
gpt4 key购买 nike

如果我有一个只有两个值的分类列表,我该如何排序才能让这些值一个接一个地排列。

例子:

# input list
lst = ['foo', 'bar', 'bar', 'foo', 'bar', 'bar', 'foo', 'foo']

# expected output
['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar']

我有一个可行的解决方案,但我觉得这可以做得更聪明。我还查看了 itertools 但找不到任何对我的问题有用的东西:

我的解决方案:

foo = [val for val in lst if val == 'foo']
bar = [val for val in lst if val == 'bar']

lst2 = [[x, y] for x, y in zip(foo, bar)]

final_list = [val for l in lst2 for val in l]

print(final_list)
['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar']

注意,列表中的两个值总是相等的

最佳答案

如果您希望第一个值放在最前面,您可以简单地列出第一个值和另一个值,并根据需要相乘:

lst = ['foo', 'bar', 'bar', 'foo', 'bar', 'bar', 'foo', 'foo']

first = lst[0]
second = (set(lst) - {first}).pop()
out = [first, second] * (len(lst)//2)
print(out)
# ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar']

一种不同的、更好的获取另一个值的方法,无需不必要地迭代整个列表来构建两个值的集合:我们只获取与第一个值不同的下一个值。

# input list
lst = ['foo', 'bar', 'bar', 'foo', 'bar', 'bar', 'foo', 'foo']
first = lst[0]
second = next(value for value in lst if value != first)
out = [first, second] * (len(lst)//2)
print(out)
# ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'bar']

关于python - 使用二进制值对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62372554/

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