Lihat product()
di itertools
modul. Itu persis seperti yang Anda gambarkan.
import itertools
my_list = [1,2,3,4]
for pair in itertools.product(my_list, repeat=2):
foo(*pair)
Ini sama dengan:
my_list = [1,2,3,4]
for x in my_list:
for y in my_list:
foo(x, y)
Sunting: Ada dua fungsi yang sangat mirip juga, permutations()
dan combinations()
. Untuk mengilustrasikan perbedaannya:
product()
menghasilkan setiap kemungkinan pasangan elemen, termasuk semua duplikat:
1,1 1,2 1,3 1,4
2,1 2,2 2,3 2,4
3,1 3,2 3,3 3,4
4,1 4,2 4,3 4,4
permutations()
menghasilkan semua urutan unik dari setiap pasangan elemen unik, menghilangkan x,x
duplikat:
. 1,2 1,3 1,4
2,1 . 2,3 2,4
3,1 3,2 . 3,4
4,1 4,2 4,3 .
Terakhir, combinations()
hanya menghasilkan setiap pasangan elemen unik, dalam urutan leksikografik:
. 1,2 1,3 1,4
. . 2,3 2,4
. . . 3,4
. . . .
Ketiga fungsi ini diperkenalkan di Python 2.6.
permutations()
dancombinations()
digunakanr=2
sebagai penggantirepeat=2
digunakan pada contoh untukproduct()
Saya memiliki masalah serupa dan menemukan solusinya di sini . Ia bekerja tanpa harus mengimpor modul apa pun.
Misalkan daftar seperti:
Solusi satu baris yang disederhanakan akan terlihat seperti ini.
Semua kemungkinan pasangan , termasuk duplikat:
Semua kemungkinan pasangan, tidak termasuk duplikat :
Pasangan unik , yang urutannya tidak relevan:
Jika Anda tidak ingin mengoperasikan tetapi hanya untuk mendapatkan pasangan, menghapus fungsi
foo
dan hanya menggunakan tupel sudah cukup.Semua kemungkinan pasangan , termasuk duplikat:
Hasil:
Semua kemungkinan pasangan, tidak termasuk duplikat :
Hasil:
Pasangan unik , yang urutannya tidak relevan:
Hasil:
Sunting: Setelah pengerjaan ulang untuk menyederhanakan solusi ini, saya menyadari itu adalah pendekatan yang sama dari Adam Rosenfield. Saya harap penjelasan yang lebih besar membantu beberapa orang untuk memahaminya dengan lebih baik.
sumber
Jika Anda hanya memanggil suatu fungsi, Anda tidak dapat melakukan lebih baik dari:
Jika Anda ingin mengumpulkan daftar hasil pemanggilan fungsi, Anda dapat melakukan:
yang akan mengembalikan Anda daftar hasil penerapan
foo(i, j)
untuk setiap pasangan yang memungkinkan(i, j)
.sumber
sumber