Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么不';t被附加的第一个元素_Python_Arrays - Fatal编程技术网

Python 为什么不';t被附加的第一个元素

Python 为什么不';t被附加的第一个元素,python,arrays,Python,Arrays,我正在尝试打印子集和问题的所有子集。也就是说,打印一个数组中与给定数字相加的所有子集。然而,在后来的事件中,子集似乎忽略了最终答案中的前一个或两个条目,这是为什么 import numpy as np def calcSubsets(arr, i, target, current, dp): if(i==0 and target != 0 and dp[0][target]): current.append(arr[i]) print(current)

我正在尝试打印子集和问题的所有子集。也就是说,打印一个数组中与给定数字相加的所有子集。然而,在后来的事件中,子集似乎忽略了最终答案中的前一个或两个条目,这是为什么

import numpy as np
def calcSubsets(arr, i, target, current, dp):
    if(i==0 and target != 0 and dp[0][target]):
        current.append(arr[i])
        print(current)
        current.clear()
        return
    if(i==0 and target ==0):
        print(current)
        current.clear() 
        return
    if(dp[i-1][target]):
        temp = []
        temp = current
        calcSubsets(arr, i-1, target, temp, dp)
    if(target >= arr[i] and dp[i-1][target-arr[i]]):
        current.append(arr[i])
        calcSubsets(arr,i-1,target-arr[i], current, dp)


def printAll(arr, n, target):
    if(n==0 or target<0):
        return
#    for i in range(0,n):
#        dp[i][0] = True
    for i in dp:
        i[0] = True
        i[1:] = False
    if(arr[0]<=target):
        dp[0][arr[0]] = True
    for i in range(1,n):
        for j in range(0,target+1):
            dp[i][j] = (dp[i-1][j] or dp[i-1][j-arr[i]]) if (arr[i] <= j) else dp[i-1][j]

    if(not(dp[n-1][target])):
        print("INFEASIBLE")
        return

    current = []
    calcSubsets(arr,n-1,target, current, dp)

#arr = fa.toArray('purple.txt')
arr = [1,2,3,4,5,6]
target = 15
n = len(arr)
dp = np.empty((n,target+1), dtype=bool)
printAll(arr, n, target)


Expected output

[5,4,3,2,1]
[6,4,3,2]
[6,5,3,1]
[6,5,4]

Actual Output

[5,4,3,2,1]
[6,4,3,2]
[5,3,1]
[6,5,4]

将numpy导入为np
def钙基组(arr、i、目标、当前、dp):
如果(i==0和target!=0和dp[0][target]):
当前.append(arr[i])
打印(当前)
当前清除()
返回
如果(i==0且目标==0):
打印(当前)
当前清除()
返回
如果(dp[i-1][target]):
温度=[]
温度=电流
钙基(arr、i-1、目标、温度、dp)
如果(目标>=arr[i]和dp[i-1][target arr[i]]):
当前.append(arr[i])
小流域(arr,i-1,目标arr[i],当前,dp)
def printAll(arr,n,目标):

如果(n==0或target,我建议使用
itertools
,完全重写代码:

# first we grab powerset() from 
# https://docs.python.org/3/library/itertools.html#itertools-recipes
from itertools import chain, combinations
def powerset(iterable):
    "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)"
    s = list(iterable)
    return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))

arr = [1,2,3,4,5,6]
target = 15
# now we filter out subsets with wrong sum
for t in powerset(arr):
    if sum(t) == target:
        print(t)
就这些