python 中随机列表的总和
Sum from random list in python
我创建了一个包含 60 个号码的随机列表,我不知道列表中包含的号码。我被要求从列表中找到总和为零的三个数字的任意组合。我能做什么?
那是我的代码:
import random
import itertools
result = []
for x in range (-30, 30):
num = random.randint(-30, 30)
while num in result:
num = random.randint(-30, 30)
result.append(num)
result = [seq for i in range(len(result), 0, -1) for seq in itertools.combinations(result, i) if sum(seq) == 0]
print result
为了演示的目的,我将为 result
定义一个特定的示例值,我们可以用它来测试并看看会发生什么。
result = [1, 2, -2, -3, 4]
您可以使用itertools.combinations
列出三个数字的所有组合。
import itertools
>>> list(itertools.combinations(result, 3))
[(1, 2, -2),
(1, 2, -3),
(1, 2, 4),
(1, -2, -3),
(1, -2, 4),
(1, -3, 4),
(2, -2, -3),
(2, -2, 4),
(2, -3, 4),
(-2, -3, 4)]
并且您可以使用 filter
和 lambda c: sum(c) == 0
作为总和为零的 select 组合的谓词。
>> list(filter(lambda c: sum(c) == 0, itertools.combinations(result, 3)))
[(1, 2, -3)]
itertools
中有一个函数combinations
,可以用来生成组合
import random
import itertools
# Generate a random list of 30 numbers
mylist = random.sample(range(-50,50), 30)
combins = itertools.combinations(mylist, 3)
interested = list(filter(lambda combin: sum(combin) == 0, combins))
print(interested)
请注意,filter()
和 itertools.combinations()
的结果是可迭代的,需要 list()
才能将可迭代转换为列表。
lambda表达式lambda combin: sum(combin) == 0
用于保留combins
中和为零的组合
itertools.combinations()
:
https://docs.python.org/3.6/library/itertools.html#itertools.combinations
filter()
:
https://docs.python.org/3.6/library/functions.html?highlight=filter#filter
我创建了一个包含 60 个号码的随机列表,我不知道列表中包含的号码。我被要求从列表中找到总和为零的三个数字的任意组合。我能做什么? 那是我的代码:
import random
import itertools
result = []
for x in range (-30, 30):
num = random.randint(-30, 30)
while num in result:
num = random.randint(-30, 30)
result.append(num)
result = [seq for i in range(len(result), 0, -1) for seq in itertools.combinations(result, i) if sum(seq) == 0]
print result
为了演示的目的,我将为 result
定义一个特定的示例值,我们可以用它来测试并看看会发生什么。
result = [1, 2, -2, -3, 4]
您可以使用itertools.combinations
列出三个数字的所有组合。
import itertools
>>> list(itertools.combinations(result, 3))
[(1, 2, -2),
(1, 2, -3),
(1, 2, 4),
(1, -2, -3),
(1, -2, 4),
(1, -3, 4),
(2, -2, -3),
(2, -2, 4),
(2, -3, 4),
(-2, -3, 4)]
并且您可以使用 filter
和 lambda c: sum(c) == 0
作为总和为零的 select 组合的谓词。
>> list(filter(lambda c: sum(c) == 0, itertools.combinations(result, 3)))
[(1, 2, -3)]
itertools
中有一个函数combinations
,可以用来生成组合
import random
import itertools
# Generate a random list of 30 numbers
mylist = random.sample(range(-50,50), 30)
combins = itertools.combinations(mylist, 3)
interested = list(filter(lambda combin: sum(combin) == 0, combins))
print(interested)
请注意,filter()
和 itertools.combinations()
的结果是可迭代的,需要 list()
才能将可迭代转换为列表。
lambda表达式lambda combin: sum(combin) == 0
用于保留combins
itertools.combinations()
:
https://docs.python.org/3.6/library/itertools.html#itertools.combinations
filter()
:
https://docs.python.org/3.6/library/functions.html?highlight=filter#filter