如何在Python中按条件对列表进行排序?

3
假设有一个列表[1,9,7,3,6]。我想产生一个新的已排序列表,该列表小于其中一个整数,例如整数为7,则新列表应该是:[1,3,6]
[1,3,6]
7个回答

5
你可以使用列表推导式来完成这个操作:
my_list = [1,9,7,3,6]
result = sorted([x for x in my_list if x < 7])

4
oldList = [1,9,7,3,6]
myInt = 7
newList = sorted([x for x in oldList if x < myInt])

这是Python的“列表推导式” - 它查看oldList中的每个元素,仅在其小于所选择的整数时将其添加到newList中。此外,sorted()方法是Python本地方法。
这是一个关于列表推导式的好资源:http://www.pythonforbeginners.com/basics/list-comprehensions-in-python 希望这有所帮助!

1
你不需要使用列表推导式。new_list = sorted(x for x in old_list if x < my_int) - Burhan Khalid

4

列表有一个排序方法:

old_list = [1,9,7,3,6]
new_list = [x for x in old_list if x < 7]
new_list.sort()

3

试试这个:

num = #some number
new_list = sorted(old_list)[:sorted(old_list).index(num)]

OR替代方案

num = 7
somelist = [3,6,7,1,2,8,9,4,5,12]
somelist.sort()
somelist[:somelist.index(num)]

OUTPUT:
[0, 1, 2, 3, 4, 5, 6]

1
请注意,这种方法效率相对较低:您对整个列表进行排序(而不是筛选后的列表),对其进行了两次排序,然后遍历它以找到要截断的索引。当然,这仅适用于更大的列表。 - Qlaus

3
您可以使用列表推导式:
sorted([i for i in [1,9,7,3,6] if i < 7])

你可以使用生成器:
sorted(i for i in [1,9,7,3,6] if i < 7)

注意:列表推导式版本的执行速度快约2倍。

2
请注意,仅适用于小列表时才更快。对于大型列表,生成器略快。有趣的是,使用filter()反而总是更慢。 - Qlaus

1
aa = filter(lambda x: x < 7, [1,9,7,3,6])
aa.sort()
print aa

OUTPUT:
[1, 3, 6]

1
您可以使用以下列表推导式。
mylist = [11, 16, 9, 6, 3, 15, 1, 18, 7, 10, 13, 5, 12, 2, 0, 4, 19, 14, 17, 8]
[x for x in sorted(mylist) if x<7]

结果:

[0, 1, 2, 3, 4, 5, 6]

希望有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接