Temukan semua kemungkinan kombinasi angka dengan python

Alat berikut memvisualisasikan apa yang dilakukan komputer langkah demi langkah saat menjalankan program tersebut


Editor Kode Python

Punya cara lain untuk menyelesaikan solusi ini?

Sebelumnya. Tulis program Python untuk menghapus kata-kata tertentu dari daftar yang diberikan
Lanjut. Tulis program Python untuk membalikkan daftar daftar yang diberikan

Berapa tingkat kesulitan latihan ini?

Mudah Sedang Keras

Uji keterampilan Pemrograman Anda dengan kuis w3resource



Ikuti kami di Facebook dan Twitter untuk pembaruan terbaru.

Piton. Kiat Hari Ini

Hasil cache dengan dekorator

Ada cara yang bagus untuk meng-cache fungsi dengan dekorator di Python. Caching akan membantu menghemat waktu dan sumber daya berharga saat ada fungsi yang mahal

Implementasinya mudah, cukup impor lru_cache dari pustaka functools dan hiasi fungsi Anda menggunakan @lru_cache

Sambil belajar kode, mudah untuk mendorong dari latihan ke latihan, mengejar rasa pencapaian. Saya menemukan bahwa semuanya lebih meresap, jika saya meluangkan waktu sejenak untuk menyempurnakan proses berpikir saya dari waktu ke waktu

Saya menemukan masalah di Hackerrank beberapa hari yang lalu yang mengharuskan saya menemukan semua kemungkinan jumlah empat dari lima bilangan bulat dalam daftar. Saya membuat catatan tentang apa yang saya lakukan di sini, untuk referensi di masa mendatang

Saya menggunakan atribut combinations dari modul itertools

Untuk mengimpor ini ke REPL atau kode Python kami

from itertools import combinations

Fungsi

def find_combos(arr):
combos = list(combinations(arr, 4))
print(combos)
_

Memecah ini

  • arr — Ini akan menjadi daftar yang kami berikan ke fungsi find_combos. Mantan.
    def find_combos(arr):
    combos = list(combinations(arr, 4))
    print(combos)
    _0
  • def find_combos(arr):
    combos = list(combinations(arr, 4))
    print(combos)
    _1 — Kombinasi membutuhkan dua parameter. Yang pertama (arr_) adalah apa yang kita iterasi. Yang kedua (
    def find_combos(arr):
    combos = list(combinations(arr, 4))
    print(combos)
    _3), adalah berapa banyak dari hal-hal tersebut di arr (e. g — daftar angka, string, apa pun) yang ingin kita gabungkan. Semua kombinasi diubah menjadi daftar menggunakan
    def find_combos(arr):
    combos = list(combinations(arr, 4))
    print(combos)
    5, lalu atur ke variabel bernama
    def find_combos(arr):
    combos = list(combinations(arr, 4))
    print(combos)
    6
  • def find_combos(arr):
    combos = list(combinations(arr, 4))
    print(combos)
    _7 — Inilah yang kami impor dari itertools yang melakukan pekerjaan kotor di balik layar. Kode untuk ini dapat ditemukan di dokumentasi Python.
  • def find_combos(arr):
    combos = list(combinations(arr, 4))
    print(combos)
    _5 — Ini adalah fungsi bawaan di Python. Cara orang awam saya memahami hal ini adalah dengan mengubah semua kombinasi tersebut menjadi daftar yang dapat kita ulangi.

Hasil

Menggunakan ini sebagai daftar kami

arr = [1, 2, 3, 4, 5]
_

Kemudian meneruskannya ke fungsi kita

find_combos(arr)

Hasilnya adalah

[(1, 2, 3, 4), (1, 2, 3, 5), (1, 2, 4, 5), (1, 3, 4, 5), (2, 3, 4, 5)]

Mengambilnya lebih jauh

Tujuan dari latihan ini adalah untuk menemukan jumlah terkecil dan terbesar dari kemungkinan kombinasi ini. Untuk melakukan ini, saya menyempurnakan kode saya sebagai berikut

Ini adalah Program Python untuk menerima tiga digit berbeda dan mencetak semua kemungkinan kombinasi dari digit tersebut

Deskripsi Masalah

Program mengambil tiga angka berbeda dan mencetak semua kemungkinan kombinasi dari angka-angka tersebut

Solusi masalah

1. Ambil angka pertama, kedua dan ketiga dan simpan dalam variabel terpisah
2. Kemudian tambahkan ketiga angka tersebut ke dalam daftar
3. Gunakan tiga for loop dan cetak digit dalam daftar jika tidak ada indeks yang sama satu sama lain
4. KELUAR

Kode Program/Sumber

Berikut adalah kode sumber Program Python untuk menerima tiga digit berbeda dan mencetak semua kemungkinan kombinasi dari digit tersebut. Output program juga ditunjukkan di bawah ini

Saya menemukan beberapa contoh kode yang sebagian melakukan apa yang saya butuhkan (lihat di bawah). Bisakah Anda membantu saya memodifikasi salah satu kode untuk melakukan apa yang saya butuhkan?

Saya perlu menemukan semua kombinasi dalam daftar angka dan untuk setiap kombinasi untuk mengurangi (atau menambah, mengalikan, atau membagi) nilai DAN kemudian menemukan hasil mana yang dijumlahkan dengan nilai tertentu

Sebagai contoh

  1. Ini daftar nomornya. 10, 12, 3, 4, 8
  2. Dan inilah nilai yang ingin saya kurangi dari setiap kombinasi. 5
  3. Dan inilah nilai target akhir (produk) yang harus ditemukan (hanya kombinasi yang memberikan hasil ini yang harus dicetak). 7

Jadi perhitungannya seharusnya (saya hanya memberikan gambaran umum karena daftar sebenarnya berpotensi lebih panjang)

10 - 5 = 5
10 + 12 - 5 = 17
10 + 12 + 3 - 5 = 20
10 + 12 + 3 + 4 - 5 = 24
10 + 12 + 3 + 4 + 8 - 5 = 32
12 - 5 = 7
12 + 3 - 5 = 10
12 + 3 + 4 - 5 = 14
12 + 3 + 4 + 8 - 5 = 22
3 - 5 = -2
3 + 4 - 5 = 2
3 + 4 + 8 - 5 = 10
4 - 5 = -1
4 + 8 - 5 = 7

Dan satu-satunya kombinasi yang harus "dicetak" adalah

12 - 5 = 7
4 + 8 - 5 = 7

Berikut adalah dua contoh kode yang saya temukan dan sebagian melakukan apa yang saya butuhkan

def subset_sum(numbers, target, partial=[]):
    s = sum(partial)

    # check if the partial sum is equals to target
    if s == target:
        print("sum(%s)=%s" % (partial, target))
    if s >= target:
        return  # if we reach the number why bother to continue

    for i in range(len(numbers)):
        n = numbers[i]
        remaining = numbers[i + 1:]
        subset_sum(remaining, target, partial + [n])


if __name__ == "__main__":
    subset_sum([10, 12, 3, 4, 8], 7)

dan yang kedua

class Solution(object):
   def combinationSum(self, candidates, target):
      result = []
      unique={}
      candidates = list(set(candidates))
      self.solve(candidates,target,result,unique)
      return result
   def solve(self,candidates,target,result,unique,i = 0,current=[]):
      if target == 0:
         temp = [i for i in current]
         temp1 = temp
         temp.sort()
         temp = tuple(temp)
         if temp not in unique:
            unique[temp] = 1
            result.append(temp1)
         return
      if target <0:
         return
      for x in range(i,len(candidates)):
         current.append(candidates[x])
         self.solve(candidates,target-candidates[x],result,unique,i,current)
         current.pop(len(current)-1)
ob1 = Solution()
print(*ob1.combinationSum([10, 12, 3, 4, 8],7), sep='\n')

Sebelumnya, terima kasih atas bantuan yang diberikan. Saya baru mengenal Python seperti yang Anda tahu

Hai Luis,

Anda benar, saya belum mengerjakan pekerjaan rumah untuk Anda, saya telah memberi Anda
alat yang Anda butuhkan untuk mengerjakan pekerjaan rumah Anda

(Saya menggunakan "pekerjaan rumah" di sini secara kiasan, bukan secara harfiah. Apakah ini adalah
tugas Anda telah ditetapkan oleh sekolah, atau pekerjaan, atau sesuatu yang Anda
bekerja pada diri sendiri, tidak terlalu penting. )

Anda sekarang memiliki semua alat yang Anda butuhkan

  • fungsi combinations() yang mengerjakan setiap kombinasi secara bergantian;

  • for-loop untuk memeriksa setiap kombinasi, satu per satu;

  • fungsi sum() yang menjumlahkan daftar angka;

  • Saya pikir Anda sudah tahu cara mengurangi 5;

  • Saya pikir Anda sudah tahu cara menguji apakah suatu nilai sama dengan 7;

  • dan Anda tahu cara mencetak

Jadi, Anda harus bisa menyatukan semua bagian

  • Gunakan for-loop dan kombinasi untuk membuat setiap kombo

  • Gunakan sum() dan pengurangan untuk mendapatkan nilai yang Anda inginkan

  • Gunakan == dan if untuk memutuskan apakah kombo harus dicetak

  • Dan gunakan print() untuk benar-benar mencetaknya

Sebagai seorang pemula, Anda akan belajar seribu kali lebih banyak dengan melakukan pekerjaan itu
diri Anda daripada jika kami hanya memberi Anda solusi. Jika Anda ingin belajar untuk
masak, Anda sebenarnya harus pergi ke dapur dan menyiapkan bahan
dan memasaknya. Anda tidak akan belajar memasak dengan menyuruh orang lain melakukannya
kerja. Sama dengan pemrograman

Setidaknya berusahalah untuk menyatukan potongan-potongan itu. Jika berhasil, bagus
Jika tidak, tunjukkan kepada kami apa yang Anda coba, dan kami akan membantu Anda memahaminya
apa yang Anda lakukan salah dan bagaimana memperbaikinya

Steven,

Anda benar, saya tidak tahu cara menguji nilai dengan Python. Sekali lagi, saya benar-benar baru mengenal Python

Namun, kode yang Anda posting awalnya melakukan apa yang saya butuhkan - setelah mengetikkan pengurangan

from itertools import combinations
numbers = (10, 12, 3, 4, 8)
for count in range(1, 6):
    for t in combinations(numbers, count):
        print(t, sum(t)-5)

-5 di akhir garis cetaknya berhasil (seperti yang Anda isyaratkan)

Ini memberikan hasil berikut, di mana baris ke-2 dan ke-15 (dalam huruf tebal) adalah nilai yang saya cari, dan satu-satunya yang ingin saya tampilkan

(10,) 5
(12,) 7 <----------------
(3,) -2
(4,) -1
(8,) 3
(10, 12) 17
(10, 3) 8
(10, 4) 9
(10, 8) 13
(12, 3) 10
(12, 4) 11
(12, 8) 15
(3, 4) 2
(3, 8) 6
(4, 8) 7 <----------------
(10, 12, 3) 20
(10, 12, 4) 21
(10, 12, 8) 25
(10, 3, 4) 12
(10, 3, 8) 16
(10, 4, 8) 17
(12, 3, 4) 14
(12, 3, 8) 18
(12, 4, 8) 19
(3, 4, 8) 10
(10, 12, 3, 4) 24
(10, 12, 3, 8) 28
(10, 12, 4, 8) 29
(10, 3, 4, 8) 20
(12, 3, 4, 8) 22
(10, 12, 3, 4, 8) 32

NAMUN, karena saya hanya tahu sedikit tentang Python, saya tidak tahu bagaimana membuat kode Anda hanya menampilkan dua baris itu, dua kombinasi itu. Saya baru saja menonton beberapa tutorial tetapi mereka memberikan contoh yang tidak membantu (menggunakan huruf atau "halo dunia" yang tidak berfungsi sama seperti saat menggunakan angka). Saya akan terus mencoba…

Bagaimanapun, terima kasih atas kode yang Anda berikan. Itu melakukan apa yang saya butuhkan, meskipun saya akan senang jika itu hanya menampilkan kombinasi target daripada saya harus menemukannya secara visual

Bagaimana Anda menemukan semua kemungkinan kombinasi dengan Python?

Untuk menemukan semua kombinasi daftar Python, juga dikenal sebagai powerset, ikuti langkah-langkah ini. .
Impor modul itertools bawaan
Tentukan daftar item
Inisialisasi daftar kosong untuk menyimpan kombinasi
Buat lingkaran yang mengulang nilai dari 0 hingga panjang daftar + 1

Bagaimana cara mendapatkan semua kemungkinan kombinasi 3 angka dengan Python?

Program Python untuk Mencetak Semua Kemungkinan Kombinasi Tiga Digit .
Ambil angka pertama, kedua dan ketiga dan simpan dalam variabel terpisah
Kemudian tambahkan ketiga angka tersebut ke dalam daftar
Gunakan tiga for loop dan cetak digit dalam daftar jika tidak ada indeks yang sama satu sama lain

Bagaimana Anda menemukan semua kemungkinan kombinasi?

Untuk menghitung kombinasi, kita akan menggunakan rumus nCr = n. / r. * (n - r). , di mana n mewakili jumlah total item, dan r mewakili jumlah item yang dipilih sekaligus. Untuk menghitung kombinasi, Anda perlu menghitung faktorial.

Bagaimana cara menghasilkan semua kemungkinan kombinasi item dari satu daftar?

Untuk mendaftar semua kemungkinan kombinasi dalam lembar Excel, ikuti prosedur berikut; .
Langkah 1. Buka lembarannya. Pertama-tama Anda harus membuka lembar dengan data yang ingin Anda buat semua kemungkinan kombinasinya. .
Langkah 2. Pilih sel untuk hasil. .
Langkah 3. Seret rumus ke sel lain