1

如果这里有这个列表:

[25, 8, 22, 9] 

如何让程序创建 2 个单独的列表并打印它们?一个应该包含所有小于 20 的数字,另一个需要包含所有大于 20 的数字。最终的打印结果应该是这样的:[8, 9],[25, 22]

4

6 回答 6

5
>>> predicates = lambda x:x<20, lambda x:x>20
>>> print [filter(pred, [25, 8, 22, 9]) for pred in predicates]
[[8, 9], [25, 22]]
于 2012-06-28T04:58:15.033 回答
4

使用列表推导

>>> L = [25, 8, 22, 9]
>>> [x for x in L if x < 20]
[8, 9]
>>> [x for x in L if x > 20]
[25, 22]
于 2012-06-28T04:58:10.883 回答
1
a =  [25, 8, 22, 9] 
print [x for x in a if x > 20]
print [x for x in a if x < 20]

您在此处使用列表推导。列表理解如下所示:

[ f(x) for x in a if cond(x) ]

这意味着:给我一个列表,其中包含for that isf(x)的每个元素。xcond(x)True

在我们的例子f(x)中是简单的x。并且cond(x)x > 20x < 20(另请注意,如果您的列表中有 20 个,它们将从结果中消失)。

如果是家庭作业,您可以以更底层的方式解决任务:

a = [25, 8, 22, 9]
list1 = []
list2 = []
for elem in a:
  if elem > 20:
     list1.append(elem)
  if elem < 20:
     list2.append(elem)
print list1
print list2

在这里,您遍历列表并检查其元素。将大于 20 的元素附加到一个列表中;并且那个小于 20 - 到另一个。

于 2012-06-28T04:58:03.087 回答
1

注意:假设您在 listTwo 中需要 20 个

listOne = [x for x in yourList if x < 20]
listTwo = [x for x in yourList if x >= 20]

print listOne
print listTwo

尽管您应该使用列表推导,但如果您从 python 开始,您可能会对 for 循环方法感兴趣

listOne = []
listOne = []

for x in yourList:
    if x < 20:
        listOne.append(x)
    else:
        listTwo.append(x)
于 2012-06-28T04:58:06.767 回答
1
def print_split_list(raw_list, split_value):
    lower_list = [v for v in raw_list if v < split_value]
    upper_list = [v for v in raw_list if v >= split_value]
    print lower_list, upper_list

print_split_list([25, 8, 22, 9], 20)  # => [8, 9] [25, 22]
于 2012-06-28T04:59:52.757 回答
-2
li = [25, 8, 22, 9]
li.sort()

for i, x in enumerate(li):
    if x > 20:
        print li[:i]
        print li[i:]
        break
于 2012-06-28T05:48:59.020 回答