2012-09-05 22 views
40

Bu yüzden, kullanıcıdan bir dizi/listede değerleri girmesini ve saklamasını isteyen bu programı yapmaya çalışıyorum.
Sonra boş bir satır girildiğinde, kullanıcıya bu değerlerden kaçının benzersiz olduğunu söyleyecektir.
Bunu gerçek hayattaki nedenlerle yapıyorum ve bir problem seti olarak değil.Python'da bir dizinin içindeki benzersiz değerleri nasıl sayarım?

# ask for input 
ipta = raw_input("Word: ") 

# create list 
uniquewords = [] 
counter = 0 
uniquewords.append(ipta) 

a = 0 # loop thingy 
# while loop to ask for input and append in list 
while ipta: 
    ipta = raw_input("Word: ") 
    new_words.append(input1) 
    counter = counter + 1 

for p in uniquewords: 

..ve ben şimdiye kadar bize yaklaşık hepsi şu şekildedir:

enter: happy 
enter: rofl 
enter: happy 
enter: mpg8 
enter: Cpp 
enter: Cpp 
enter: 
There are 4 unique words! 

Benim kodudur.
Listedeki benzersiz sözcük sayısını nasıl sayacağımı bilmiyorum?
Birisi çözümü gönderebilsin diye, bundan öğrenebilirim ya da en azından nasıl olabileceğini bana göster, teşekkürler! Bununla

words = ['a', 'b', 'c', 'a'] 
unique_words = set(words)    # == set(['a', 'b', 'c']) 
unique_word_count = len(unique_words) # == 3 

Silahlı çözümünüzü:

len(set(new_words)) 
+3

Eğer kod örneğinde, Python yönelik önem girinti düzeltmek var! – codebox

+0

Kodunuzu, okunabilir hale getirmek için düzenlemek yerine kaldırdınız! Orada kod olması çok yardımcı olacaktır ... – Hbcdev

+0

@codebox Üzgünüm şimdi –

cevap

95

Sen çiftleri kaldırmak için bir set kullanabilir ve sonra len fonksiyon seti elemanları saymak için aşağıdaki gibi basit olabilir:

13

bir set kullanın:

0
ipta = raw_input("Word: ") ## asks for input 
words = [] ## creates list 
unique_words = set(words) 
0

Aşağıdakiler işe yaramalıdır. Lambda işlevi yinelenen kelimeleri filtreler. Bir rağmen

from collections import Counter 


words = ['a', 'b', 'c', 'a'] 

Counter(words).keys() # equals to list(set(words)) 
Counter(words).values() # counts the elements' frequency 
0

Burada bir sete yeni kendim kullanmak ederdim ama henüz başka yolu set en kolay yoldur, ayrıca bir dict kullanabilir ve some_dict.has(key)'u sadece benzersiz anahtar ve değerlerle bir sözlükte kullanmak için kullanabilirsiniz. işlev çağrısı benzersiz np.unique yoktur ndarray (ARRAY_NAME için

word_map = {} 
i = 1 
for j in range(len(words)): 
    if not word_map.has_key(words[j]): 
     word_map[words[j]] = i 
     i += 1                
num_unique_words = len(new_map) # or num_unique_words = i, however you prefer 
0
ipta = raw_input("Word: ") ## asks for input 
words = [] ## creates list 

while ipta: ## while loop to ask for input and append in list 
    words.append(ipta) 
    ipta = raw_input("Word: ") 
    words.append(ipta) 
#Create a set, sets do not have repeats 
unique_words = set(words) 

print "There are " + str(len(unique_words)) + " unique words!" 
86

Ayrıca, kodunuzu refactor collections.Counter kullanın:

inputs=[] 
input = raw_input("Word: ").strip() 
while input: 
    inputs.append(input) 
    input = raw_input("Word: ").strip() 
uniques=reduce(lambda x,y: ((y in x) and x) or x+[y], inputs, []) 
print 'There are', len(uniques), 'unique words' 
+11

Joel'in sorusuna bir cevap değil, * tam * ne aradığımı, teşekkürler! –

+0

Mükemmel. Ve bir boğa gözü. Teşekkür @ Vidul –

+0

'Sayaç (kelime) .values ​​()' güzel. Sayım, sözcük listesinin ilk görünüşü sırasına göre mi varsayılıyor?Demek istediğim, sayımın sayımını bize verir, sonra b, sonra c, sonra d ... –

0

:

uniquewords = [] 
while True: 
    ipta = raw_input("Word: ") 
    if ipta == "": 
     break 
    if not ipta in uniquewords: 
     uniquewords.append(ipta) 
print "There are", len(uniquewords), "unique words!" 
0

: Teşekkür varsayarsak

zaten bir sayıya listesindeki benzersiz kelimeleri haritalama bir dicti oluşturmak, kullanıcıdan girişi olan words[] doldurulan) Serisi için

bir işlev çağrısı value_counts() exa- Series_name.value_counts()

İlgili konular