从列表的元素中生成数字
Making number from elements of list
我如何检查是否可以从列表元素创建数字?
例如:
列表=[1,1,3,3,3,3,5,10,23,53]
现在我们可以从 [1,3,5] 或 [3,3,3] 中得到 9
我试过类似的东西:
list=[1,1,3,3,3,3,5,10,23,53]
tmp=[]
sum=0
for i in range(len(list)):
tmpChange=9
tmpChange -= list[i]+sum
if tmpChange == 0:
break
elif tmpChange > 0:
tmp.append(list[i])
sum += list[i]
print(tmpChange)
print(tmp)
else:
tmp.pop(i)
一种简单的方法是找到原始列表的所有子集,您可以使用 itertools.combinations
来做到这一点。然后您可以检查子集是否与您的原始值相加,然后将它们添加到 set
.
import itertools
l = [1,1,3,3,3,3,5,10,23,53]
total = 9
values = set()
for r in range(1, len(l)):
for c in itertools.combinations(l, r):
if sum(c) == total:
values.add(tuple(c))
结果是
>>> values
{(1, 3, 5), (3, 3, 3)}
作为另一个使用以下数据的例子
l = [1,1,3,3,3,3,4,5,9,10,23,53]
结果会是
>>> values
{(4, 5), (3, 3, 3), (1, 1, 3, 4), (1, 3, 5), (9,)}
我如何检查是否可以从列表元素创建数字?
例如: 列表=[1,1,3,3,3,3,5,10,23,53]
现在我们可以从 [1,3,5] 或 [3,3,3] 中得到 9 我试过类似的东西:
list=[1,1,3,3,3,3,5,10,23,53]
tmp=[]
sum=0
for i in range(len(list)):
tmpChange=9
tmpChange -= list[i]+sum
if tmpChange == 0:
break
elif tmpChange > 0:
tmp.append(list[i])
sum += list[i]
print(tmpChange)
print(tmp)
else:
tmp.pop(i)
一种简单的方法是找到原始列表的所有子集,您可以使用 itertools.combinations
来做到这一点。然后您可以检查子集是否与您的原始值相加,然后将它们添加到 set
.
import itertools
l = [1,1,3,3,3,3,5,10,23,53]
total = 9
values = set()
for r in range(1, len(l)):
for c in itertools.combinations(l, r):
if sum(c) == total:
values.add(tuple(c))
结果是
>>> values
{(1, 3, 5), (3, 3, 3)}
作为另一个使用以下数据的例子
l = [1,1,3,3,3,3,4,5,9,10,23,53]
结果会是
>>> values
{(4, 5), (3, 3, 3), (1, 1, 3, 4), (1, 3, 5), (9,)}