这是我用于使用
计算子集的代码代码
private static readonly Lazy<Locator> _locator = new Lazy<Locator>(() => new Locator(), LazyThreadSafetyMode.PublicationOnly);
public static Locator Instance => _locator.Value;
整数值的输出
import numpy as np
array = np.array([15,1,4,6,3,10,4.2])
num = 8.2
def subsetsum(array,num):
if num == 0 or num < 1:
return None
elif len(array) == 0:
return None
else:
if array[0] == num:
return [array[0]]
else:
with_v = subsetsum(array[1:],(num - array[0]))
if with_v:
return [array[0]] + with_v
else:
return subsetsum(array[1:],num)
print('\nList of Values : ',array)
print('\nSum Desired : ',num)
print('\nValues that add up to sum : ',subsetsum(array,num))
现在,我如何使用PANDAS Dataframe而不是使用Numpy Array来实现相同的功能?
答案 0 :(得分:1)
您可以通过将np.array
替换为pd.Series
并在.iloc
之后添加array
来逐字翻译,以按位置使用索引。这就是我在下面所做的。
顺便说一句,你真的想在那里有整数。如果数字是以小数位数给出的,则使用round(x*100)
之类的内容转换为整数。试图实现浮点数和的相等是令人沮丧的一个因素:0.1 + 0.2 == 0.3
是假的。
最重要的是:在这里使用Pandas没有任何优势。它是一个用于分析数据的模块,而不是用于解决组合问题的模块。它使用NumPy,所以你得到的是一个较慢的代码,带有Pandas索引数据层的额外开销。
如果你想提高代码的性能,我建议在开始之前按降序对数组进行排序,这样太大的使用值就会很快被移除。
import pandas as pd
array = pd.Series([15,1,4,6,3,10,4])
num = 8
def subsetsum(array,num):
if num == 0 or num < 1:
return None
elif len(array) == 0:
return None
else:
if array.iloc[0] == num:
return [array.iloc[0]]
else:
with_v = subsetsum(array.iloc[1:], (num - array.iloc[0]))
if with_v:
return [array.iloc[0]] + with_v
else:
return subsetsum(array.iloc[1:],num)
print('\nList of Values : ',array)
print('\nSum Desired : ',num)
print('\nValues that add up to sum : ',subsetsum(array,num))