Sudah lama dan saya mengalami kesulitan membungkus kepala saya di sekitar algoritma yang saya coba buat. Pada dasarnya, saya memiliki dua daftar dan ingin mendapatkan semua kombinasi dari dua daftar.
Saya mungkin tidak menjelaskannya dengan benar, jadi inilah contohnya.
name = 'a', 'b'
number = 1, 2
output dalam hal ini adalah:
1. A1 B2
2. B1 A2
Bagian yang sulit adalah saya mungkin memiliki lebih banyak item dalam variabel "nama" daripada item dalam variabel "angka" (angka akan selalu sama dengan atau kurang dari variabel nama).
Saya bingung bagaimana melakukan semua kombinasi (bersarang untuk loop?) Dan bahkan lebih bingung pada logika untuk menggeser item dalam variabel nama jika ada lebih banyak item dalam nama daripada mereka dalam daftar nomor.
Saya bukan programmer terbaik tetapi saya pikir saya bisa mencobanya jika seseorang dapat membantu saya memperjelas logika / algoriythm untuk mencapai ini. Jadi saya baru saja terjebak di sarang untuk loop.
Memperbarui:
Inilah output dengan 3 variabel dan 2 angka:
name = 'a', 'b', 'c'
number = 1, 2
keluaran:
1. A1 B2
2. B1 A2
3. A1 C2
4. C1 A2
5. B1 C2
6. C1 B2
sumber
Jawaban:
Catatan : Jawaban ini untuk pertanyaan spesifik yang diajukan di atas. Jika Anda di sini dari Google dan hanya mencari cara untuk mendapatkan produk Cartesian dengan Python,
itertools.product
atau pemahaman daftar sederhana mungkin apa yang Anda cari - lihat jawaban lainnya.Misalkan
len(list1) >= len(list2)
. Maka yang Anda inginkan adalah mengambil semua permutasilen(list2)
darilist1
dan mencocokkannya dengan item dari list2. Dengan python:Kembali
sumber
zip
dan serupa.Cara paling sederhana adalah dengan menggunakan
itertools.product
:sumber
Mungkin lebih sederhana daripada yang paling sederhana di atas:
tanpa impor
sumber
Saya mencari daftar yang dikalikan dengan dirinya sendiri dengan hanya kombinasi unik, yang disediakan sebagai fungsi ini.
Di sini sebagai kutipan dari dokumen Python pada
itertools
Itu mungkin membantu Anda menemukan apa yang Anda cari.sumber
Anda mungkin ingin mencoba pemahaman daftar satu baris:
sumber
cara terbaik untuk mengetahui semua kombinasi untuk sejumlah besar daftar adalah:
hasilnya adalah:
sumber
Atau jawaban KISS untuk daftar pendek:
Tidak sebagus itertools tetapi Anda menggunakan python sehingga kinerja sudah bukan perhatian utama Anda ...
Saya suka semua jawaban lain juga!
sumber
perbaikan kecil untuk jawaban dari interjay, untuk menjadikan hasilnya sebagai daftar rata.
referensi dari tautan ini
sumber
Tanpa itertools
sumber
Menjawab pertanyaan "diberikan dua daftar, temukan semua kemungkinan permutasi berpasangan dari satu item dari setiap daftar" dan menggunakan fungsionalitas Python dasar (yaitu, tanpa itertools) dan, karenanya, membuatnya mudah untuk direplikasi untuk bahasa pemrograman lain:
Kembali
sumber
Jawaban yang lebih baik untuk ini hanya berfungsi untuk panjang daftar tertentu yang disediakan.
Berikut adalah versi yang berfungsi untuk setiap input yang panjang. Ini juga membuat algoritma jelas dalam hal konsep matematika kombinasi dan permutasi.
Output ini:
sumber