Saya memiliki masalah serupa dan menemukan solusinya di sini . Ia bekerja tanpa harus mengimpor modul apa pun.
Misalkan daftar seperti:
people = ["Lisa","Pam","Phil","John"]
Solusi satu baris yang disederhanakan akan terlihat seperti ini.
Semua kemungkinan pasangan , termasuk duplikat:
result = [foo(p1, p2) for p1 in people for p2 in people]
Semua kemungkinan pasangan, tidak termasuk duplikat :
result = [foo(p1, p2) for p1 in people for p2 in people if p1 != p2]
Pasangan unik , yang urutannya tidak relevan:
result = [foo(people[p1], people[p2]) for p1 in range(len(people)) for p2 in range(p1+1,len(people))]
Jika Anda tidak ingin mengoperasikan tetapi hanya untuk mendapatkan pasangan, menghapus fungsi foodan hanya menggunakan tupel sudah cukup.
Semua kemungkinan pasangan , termasuk duplikat:
list_of_pairs = [(p1, p2) for p1 in people for p2 in people]
Hasil:
('Lisa', 'Lisa')
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Lisa')
('Pam', 'Pam')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'Lisa')
('Phil', 'Pam')
('Phil', 'Phil')
('Phil', 'John')
('John', 'Lisa')
('John', 'Pam')
('John', 'Phil')
('John', 'John')
Semua kemungkinan pasangan, tidak termasuk duplikat :
list_of_pairs = [(p1, p2) for p1 in people for p2 in people if p1 != p2]
Hasil:
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Lisa')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'Lisa')
('Phil', 'Pam')
('Phil', 'John')
('John', 'Lisa')
('John', 'Pam')
('John', 'Phil')
Pasangan unik , yang urutannya tidak relevan:
list_of_pairs = [(people[p1], people[p2]) for p1 in range(len(people)) for p2 in range(p1+1,len(people))]
Hasil:
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'John')
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.