避免for循环删除列表的一部分

时间:2015-10-28 15:29:13

标签: python python-3.x

我有一个列表,我可以从中获得五个随机数。我的问题是我想创建一个没有选择的新列表。当然,我可以使用for循环来实现它,但也许有一个更有效的解决方案,没有for循环,或者可能有例如理解。

list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
some_list = random.sample(list, 5)
print(some_list)

for card in some_list:
    list.remove(card)

print(list)

输出:

[15, 2, 13, 7, 8]
[1, 3, 4, 5, 6, 9, 10, 11, 12, 14]

2 个答案:

答案 0 :(得分:2)

biglist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
randoms = random.sample(biglist, 5)
newlist = [x for x in biglist if x not in randoms]

答案 1 :(得分:2)

如果您的列表中没有重复元素,则可以使用set并设置差异,以获得结果。如果你不关心结果的顺序。例如 -

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
some_list = random.sample(list1, 5)
result = list(set(list1) - set(some_list))

另外请确保您没有为变量list命名(为此起作用),因为这会影响内置类型list并且您将无法使用list(..)创建列表。

演示 -

>>> import random
>>> list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
>>> some_list = random.sample(list1, 5)
>>> result = list(set(list1) - set(some_list))
>>> result
[3, 5, 6, 7, 8, 9, 10, 11, 12, 13]
>>> some_list
[4, 1, 15, 14, 2]