Benzer bir sorunla karşılaştım ve here numaralı özümü buldu. Herhangi bir modülü almak zorunda kalmadan çalışır.
people = ["Lisa","Pam","Phil","John"]
Basitleştirilmiş tek satırlık çözüm şu şekilde görünecektir:
gibi bir liste varsayalım.
Tüm olası çiftleri dahil çiftleri:
result = [foo(p1, p2) for p1 in people for p2 in people]
Tüm olası çiftleri hariç çiftleri:
result = [foo(p1, p2) for p1 in people for p2 in people if p1 != p2]
Eşsiz çiftleri, sıralamasının bir önemi yoktur:
result = [foo(people[p1], people[p2]) for p1 in range(len(people)) for p2 in range(p1+1,len(people))]
Çalışmak istemiyorsanız, sadece çiftleri almak için foo
işlevini kaldırarak ve yalnızca bir tuple kullanmak yeterli olacaktır.
Tüm olası çiftleri dahil çiftleri:
list_of_pairs = [(p1, p2) for p1 in people for p2 in people]
Sonuç:
('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')
Tüm olası çiftleri hariç çiftleri:
list_of_pairs = [(p1, p2) for p1 in people for p2 in people if p1 != p2]
Sonuç:
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Lisa')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'Lisa')
('Phil', 'Pam')
('Phil', 'John')
('John', 'Lisa')
('John', 'Pam')
('John', 'Phil')
Benzersiz çiftleri sıralamasının bir önemi yoktur:
list_of_pairs = [(people[p1], people[p2]) for p1 in range(len(people)) for p2 in range(p1+1,len(people))]
Sonuç:
('Lisa', 'Pam')
('Lisa', 'Phil')
('Lisa', 'John')
('Pam', 'Phil')
('Pam', 'John')
('Phil', 'John')
Düzenleme: rework bu çözümü basitleştirmek için sonra, bunun aynı olduğunu fark Adam Rosenfield'den yaklaşım. Umarım daha büyük bir açıklama, bazılarının bunu daha iyi anlamasına yardımcı olur.
Itertools'u bilmiyordum, bu mükemmel. Teşekkürler ! – GuiSim
Tek, itertools.product (my_list, 2) çalıştırdığımda, int'nin callable olmadığından şikayet ediyor. Bunu değiştirdikten sonra çalışır: itertools.product (my_list, yineleme = 2) – ojrac
(Python 2.6.2 kullanarak) – ojrac