2012-09-05 24 views
40

इसलिए मैं इस प्रोग्राम को बनाने की कोशिश कर रहा हूं जो उपयोगकर्ता को इनपुट के लिए पूछेगा और मूल्यों को सरणी/सूची में संग्रहीत करेगा।
फिर जब एक रिक्त रेखा दर्ज की जाती है तो यह उपयोगकर्ता को बताएगी कि उनमें से कितने मूल्य अद्वितीय हैं।
मैं इसे वास्तविक जीवन के कारणों के लिए बना रहा हूं और समस्या के रूप में नहीं।मैं पायथन में सरणी के अंदर अद्वितीय मानों को कैसे गिन सकता हूं?

# 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: 

..और कि सभी मैं अब तक मिल गया है के बारे में बताया गया है:

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

मेरे कोड इस प्रकार है।
मुझे यकीन नहीं है कि सूची में शब्दों की अनूठी संख्या को कैसे गिनना है?
अगर कोई समाधान पोस्ट कर सकता है तो मैं इससे सीख सकता हूं, या कम से कम मुझे दिखा सकता हूं कि यह कितना अच्छा होगा, धन्यवाद! अपने समाधान इस के साथ

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

सशस्त्र,:

+3

आप अपने कोड नमूना, पायथन में अपनी महत्वपूर्ण में खरोज को ठीक कर सकता है! – codebox

+0

आपने इसे पढ़ने योग्य बनाने के लिए इसे संपादित करने के बजाय अपना कोड हटा दिया है! कोड होने से बहुत मदद मिलेगी ... – Hbcdev

+0

@codebox क्षमा करें अब –

उत्तर

95

आप एक set डुप्लिकेट निकालने के लिए उपयोग कर सकते हैं, और फिर len समारोह सेट में तत्वों की गिनती करने के:

len(set(new_words)) 
13

एक set का प्रयोग करें जितना सरल हो सकता है:

words = [] 
ipta = raw_input("Word: ") 

while ipta: 
    words.append(ipta) 
    ipta = raw_input("Word: ") 

unique_word_count = len(set(words)) 

print "There are %d unique words!" % unique_word_count 
0
ipta = raw_input("Word: ") ## asks for input 
words = [] ## creates list 
unique_words = set(words) 
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

मैं अपने आप को एक सेट का उपयोग करते हैं, लेकिन यहां अभी तक एक और तरीका है सेट सबसे आसान तरीका है, आप केवल एक अद्वितीय कुंजी और मूल्यों के साथ एक शब्दकोश को पॉप्युलेट करने के लिए एक नियम का उपयोग कर सकते हैं और some_dict.has(key) का उपयोग कर सकते हैं।

आप यह मानते हुए पहले से ही उपयोगकर्ता से इनपुट के साथ words[] ले लिया है, एक dict एक नंबर करने के सूची में अद्वितीय शब्द मानचित्रण बनाने के लिए:

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

इसके अलावा, collections.Counter का उपयोग अपने कोड refactor करने के लिए:

from collections import Counter 


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

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

जोएल के प्रश्न का उत्तर नहीं है, लेकिन * बिल्कुल * जो मैं ढूंढ रहा था, धन्यवाद! –

+0

बिल्कुल सही। और एक बैल आंखें। धन्यवाद @ विदुल –

+0

'काउंटर (शब्द) .values ​​()' अच्छा है। हम मानते हैं कि गिनती शब्दों की सूची की पहली उपस्थिति के क्रम में है?मेरा मतलब है, मुझे लगता है कि गिनती हमें एक की गिनती देगी, फिर बी, फिर सी, फिर डी ... –

0

एक हालांकि

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' 
0

ndarray है समारोह कॉल अद्वितीय np.unique (Array_Name के लिए)

सीरीज के लिए वहाँ एक समारोह कॉल value_counts() exa- Series_name.value_counts()