python问题:写一个函数 func_3s。 参数是一个整数列表 nums。该函数打印输出所有3个数组合 [nums[i], nums[j], nums[k]]

python写函数
写一个函数 func_3s。 参数是一个整数列表 nums。该函数打印输出所有3个数组合 [nums[i], nums[j], nums[k]],要求满足 i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0.

注意,不要有重复的组合。
例如1:
nums = [-1,0,1,2,-1,-4]
输出 [[-1,-1,2],[-1,0,1]]
例如2:
nums = [0]
输出 []

没什么思路以及,阶乘该怎么写呢
nums = [-1,0,1,2,-1,-4]
res=[]
for i in range(len(nums)):
    for j in range(len(nums)):
        for k in range(len(nums)):
            if i != j and  i != k and j != k and nums[i] + nums[j] + nums[k] == 0:
                a=sorted([nums[i], nums[j], nums[k]])
                if a not in res:
                #     res.append([nums[i], nums[j], nums[k]])
                        res.append(a)
print(res)

img

给个例子参考:

def func_3s(nums):
    lst = []
    for i in range(len(nums)):
        for j in range(len(nums)):
            if j==i:
                continue
            for k in range(len(nums)):
                if j==k or k==i:
                    continue
                if nums[i]+nums[j]+nums[k]==0:
                    l = [nums[i],nums[j],nums[k]]
                    l.sort()
                    if l not in lst:
                        lst.append(l)
    return lst
nums = [-1,0,1,2,-1,-4]
print(func_3s(nums))
nums = [0]
print(func_3s(nums))

img


如有帮助,请采纳!


import itertools as it

def  func_3s(nums):
    res = set(tuple(sorted(i)) for i in it.combinations(nums, 3) if sum(i) == 0)
    return [list(i) for i in res]

s = [-1, 0, 1, 2, -1, -4]
rs = func_3s(s)
print(rs)
'''--result
[[-1, 0, 1], [-1, -1, 2]]
'''

#阶乘

def fact(n):
    f=1
    for i in range(1,n+1):
        f *= i
    print(f)


'''
第一个问题,条件1:这三个数要么都不同,要么有两个相同,条件2和为0,
三个相同的数字相加等于0,除非是3个0,所以第二个条件满足的条件下,除了0这个特殊情况
完全满足第一个条件,所以第一个条件我们完全不必理会只要排除全是0的情况。

'''        

def func_3s(li):
    res = []
    for i in range(len(li)-1):
        for k in range(i+1,len(li)):
            x = -(li[i]+li[k])
            temp = sorted([li[i],li[k],x])
            if x in li and any(temp):
                if temp not in res:
                    res.append(temp)
            else:
                break

    print(res)
    
li = [-1,0,1,2,-1,-4,0,0,3,-2,0,-5,1]


func_3s(li)

这道题用数学语言来描述就是,有一个数的集合,从中取3个数使得和为0的组合情况。

所以这个解实质是从列表中取3个数(索引均不相同)),满足和为0的情况,变成了一个提取组合加过滤的算法。

不过你所谓的不能有重复的组合是指什么?

def func_3s(inList):
    rt=[]
    inLen = len(inList)
    if inLen<3:
        return rt
    for i in range(inLen):
        for j in range(i+1,inLen):
            for k in range(j+1,inLen):
                if inList[i]+inList[j]+inList[k] == 0:
                    # 下面的几步是根据重复定义来看,如果重复指i,j,k 位置,则应该去掉下面3行,直接变为 rt.append([inList[i],inList[j],inList[k]])
                    atmp=sorted([inList[i],inList[j],inList[k]])
                    if atmp not in rt:
                        rt.append(atmp)
    return rt


li = [-1,0,1,2,-1,-4,0,0,3,-2,0,-5,1]
print( func_3s(li) )