Apakah ada cara untuk mendapatkan daftar int baru dari daftar int, yang jumlahnya mencapai nilai tertentu? [duplikat]

Aug 20 2020

Saya memiliki daftar bilangan bulat, mereka diurutkan secara acak dan dapat diulang: mylist = [5,4,2,4,5,6,7,3,8,3]dan nilai tertentu (misalnya value=35:)

Sekarang saya ingin mendapatkan daftar bilangan bulat dari mylist, kami menamainya sumlist, yang mencakup semua opsi angka yang mungkin digabungkan value.

Sehingga ketika saya akan melakukan:

sum=0
for i in  sumlist[0]:
   sum+=i

sum == valueakan kembali True.

Jawaban

E-A Aug 20 2020 at 04:26

Itertools.combinations mengelola ini dengan cukup mudah. Ketika Anda menyediakannya dengan daftar dan panjang, itu akan memberikan semua kombinasi yang mungkin dari panjang itu, dan, tidak seperti permutasi, itu menghapus duplikat. Untuk memastikan setiap opsi dicoba, setiap panjang (dari 0 hingga string penuh) harus dicoba, sebagai berikut:

import itertools
def SumList(MyList,Value):
    for Length in range(1,len(MyList)):          
        for ListOfVals in itertools.combinations(MyList,Length): 
            Total=0
            for num in ListOfVals:
                Total+=num
            if Total==Value:
                
                return(ListOfVals)
                
mylist=[5,4,2,4,5,6,7,3,8,3]
value=35
print(SumList(mylist,value))



>>[5,4,5,6,7,8]

Sama seperti sidenote cepat, ini akan selalu menghasilkan kombinasi terpendek, mengingat kombinasi ini mengiterasi panjang dari terpendek ke terpanjang.