2016-03-20 13 views
0

Bu, daha büyük bir ödevin parçası olan daha küçük bir algoritmadır. İki listem var. Biri, insanların listesidir ve bir tanesi her kişinin farklı sorulara cevaplarının listesidir. Her soruda birden fazla cevap olabilir veya sadece bir tane olabilir.Bir listedeki değerlerle adları ilişkilendiren bir algoritma nasıl tasarlanır? Python

İşte listelerin bir örneği. İlk liste dört isim. Sam, Mary, Bob, Dan. İkinci liste şöyle devam eder: Sam'in 1. soruya cevabı, Mary'nin 1. soruya cevabı, Bob'un 1. soruya cevabı, Dan'ın 1. soruya cevabı, Sam'in 2. soruya cevabı, Mary'nin 2. soruya cevabı, Bob'un 2. soruya cevabı, Dan'ın cevabı. soru sormak için .... Nasıl cevapları toplamak ve isim listesinden doğru kişi ile gruplandırmak için bir algoritma geliştirdim? İdeal olarak bu algoritma, herhangi bir sayıda insan ve soru için işe yarayacaktır.

Her bir listenin daha açık bir örneği.

list1 = ['Sam', 'Mary', 'Bob', 'Dan'] 
list2 = [['Red', 'Green'], 
     ['Blue', 'Yellow'], 
     ['Green', 'Red'], 
     ['Orange', 'Brown'], 
     [1, 4, 5], 
     [3, 7, 8], 
     [9, 5, 4], 
     [3, 8, 2], 
     [A], [C], [D], [D]] 
+2

Sen listelerinin yerine sözlüğü kullanabilirsiniz. Neden listede ısrar ediyorsun? İlk kişi için tüm öğeleri toplamak için – Sharad

+3

'N = len (liste1)' ve sonra 'list2 [0 :: N]'. Buradan genelleştirebilir misin? – Reti43

+0

Cevapları isimlerle gruplamak için bir liste kullanmakta ısrar etmiyorum. Bunu bir sözlük kullanarak nasıl yaparım? –

cevap

2

bir dict o anki yapıdan cevapları toplamak istiyorsanız, aşağıdaki (@ Reti43 yorumuyla ilgili bina) yapabilirdi:

n = len(list1) # number of players 
answer_dict = {list1[i]: list2[i::n] for i in xrange(n)} # dict comprehension 

# answer_dict 
# { 
#  'Sam': [['Red', 'Green'], [1, 4, 5], [A]], 
#  ... 
# } 

dilim operatörü [start:end:step] bir tüm unsurlarını toplar start listesinden (varsayılan olarak: 0) end (yalnızca, varsayılan: len(list)) step (varsayılan: 1) adımlarında listelenir.

Şimdi 3 soruya Mary'nin cevabını erişmek olacaktır:

answer_dict['Mary'][2] 
+0

Ah, mükemmel cevap. Beni çabuk kurtarır. :) Eksik olan tek şey, tamamlanma uğruna, sonuçlara ulaşmanın bir örneğidir, örn., 'Answer_dict [' Bob '] [1] '. – Reti43

+0

Çok güzel cevap! –

+0

@ Reti43 İyi nokta. Cevabımı güncelledi. – schwobaseggl

İlgili konular