আমি কীভাবে তালিকার ভিতরে অনন্য মান গণনা করব count


126

সুতরাং আমি এই প্রোগ্রামটি করার চেষ্টা করছি যা ব্যবহারকারীকে ইনপুট জিজ্ঞাসা করবে এবং মানগুলি একটি অ্যারে / তালিকায় সংরক্ষণ করবে।
তারপরে একটি ফাঁকা লাইন প্রবেশ করা হলে এটি ব্যবহারকারীকে জানাবে যে those মানগুলির মধ্যে কতটি অনন্য।
আমি এটিকে বাস্তব জীবনের কারণে তৈরি করছি, সমস্যা সমাধান হিসাবে নয়।

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

আমার কোডটি নিম্নরূপ:

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

.. এবং এটাই আমি এ পর্যন্ত অর্জন করেছি।
আমি নিশ্চিত না কীভাবে একটি তালিকার শব্দের অনন্য সংখ্যা গণনা করব?
যদি কেউ সমাধান পোস্ট করতে পারেন তবে আমি সেখান থেকে শিখতে পারি, বা কমপক্ষে আমাকে দেখান যে এটি কীভাবে দুর্দান্ত হবে, ধন্যবাদ!


4
আপনি কি আপনার কোডের নমুনায় ইন্ডেন্টেশনটি ঠিকঠাক করতে পারবেন, এটি পাইথনের গুরুত্বপূর্ণ!
কোডবক্স

1
আপনি আপনার কোডটিকে এটিকে পাঠযোগ্য করে তোলার পরিবর্তে সম্পাদনার পরিবর্তে সরিয়ে দিয়েছেন! কোডটি থাকায় অনেক সাহায্য করবে ...
hcarver

1
@ কোডডবক্স দুঃখিত এখনই করবে
জোয়েল আকু।

উত্তর:


244

এছাড়াও, সংগ্রহগুলি ব্যবহার করুন your আপনার কোডটি রিফ্যাক্টর করতে কাউন্টার:

from collections import Counter

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

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

আউটপুট:

['a', 'c', 'b']
[2, 1, 1]

46
জোয়েলের প্রশ্নের উত্তর না, তবে ঠিক আমি যা খুঁজছিলাম, ধন্যবাদ!
হু ওয়াল্টারস

পারফেক্ট। এবং একটি ষাঁড় চোখ। ধন্যবাদ @Vidul
পরাগ Tyagi

Counter(words).values()সুন্দর. আমরা ধরে নিচ্ছি যে গণনাটি শব্দের তালিকার প্রথম উপস্থিতির ক্রম অনুসারে? আমার অর্থ, আমি ধরে নিচ্ছি যে গণনাটি আমাদের একটি, তারপর খ, তারপর সি, তারপর ডি গণনা দেবে ...
মনিকা হেডডনেক

আপনি যদি করতে পারেন এমন ডিক হিসাবে এটি উপস্থাপন করতে চান তবে নোট count_dict = {'a': 2, 'b': 1, 'c': 1}করুনcount_dict = dict(Counter(words).items())
পিটার

219

সদৃশ অপসারণ করতে আপনি একটি সেট এবং তারপরে সেটের উপাদানগুলি গণনা করতে লেন ফাংশন ব্যবহার করতে পারেন :

len(set(new_words))


16

একটি সেট ব্যবহার করুন :

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

এটি দিয়ে সজ্জিত, আপনার সমাধানটি এতটা সহজ হতে পারে:

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

6
aa="XXYYYSBAA"
bb=dict(zip(list(aa),[list(aa).count(i) for i in list(aa)]))
print(bb)
# output:
# {'X': 2, 'Y': 3, 'S': 1, 'B': 1, 'A': 2}

1
দয়া করে ব্যাখ্যা করুন কীভাবে এটি অন্যান্য উত্তরগুলির থেকে পৃথক
আকাইস্তেফ 7



1

যদিও সেটটি সহজতম উপায়, আপনি একটি ডিক ব্যবহার some_dict.has(key)করতে পারেন এবং কেবল অনন্য কী এবং মান সহ একটি অভিধান তৈরি করতে ব্যবহার করতে পারেন ।

ধরুন আপনি ইতিমধ্যে words[]ব্যবহারকারীর কাছ থেকে ইনপুট নিয়ে পপুলেট করেছেন, তালিকার অনন্য শব্দের একটি সংখ্যায় ম্যাপিংয়ের একটি ডিক তৈরি করুন:

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

1

পান্ডা ব্যবহার করে অন্যান্য পদ্ধতি

import pandas as pd

LIST = ["a","a","c","a","a","v","d"]
counts,values = pd.Series(LIST).value_counts().values, pd.Series(LIST).value_counts().index
df_results = pd.DataFrame(list(zip(values,counts)),columns=["value","count"])

তারপরে আপনি যে কোনও ফরমেটে ফলাফল রফতানি করতে পারবেন


1

কেমন:

import pandas as pd
#List with all words
words=[]

#Code for adding words
words.append('test')


#When Input equals blank:
pd.Series(words).nunique()

এটি তালিকার মধ্যে কতগুলি অনন্য মূল্য রয়েছে তা ফিরিয়ে দেয়


স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম! দেখে মনে হচ্ছে এই সমাধানটি pandasফ্রেমওয়ার্ক ব্যবহার করে ধরেছে। উত্তরে এটি উল্লেখ করা ভাল কারণ এটি অন্যান্য ব্যবহারকারীর পক্ষে অস্পষ্ট।
সার্জি শুবিন

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

আমি নিজে একটি সেট ব্যবহার করব, তবে এখানে আরও একটি উপায় রয়েছে:

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
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!"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.