স্টেটমেন্টের সাথে বোধগম্য তালিকাবদ্ধ করুন


106

আমি 2 টি পুনরাবৃত্তের তুলনা করতে এবং আইটেমগুলি মুদ্রণ করতে চাই যা উভয় পুনরাবৃত্তিতে প্রদর্শিত হয়।

>>> a = ('q', 'r')
>>> b = ('q')


# Iterate over a. If y not in b, print y.
# I want to see ['r'] printed.
>>> print([ y if y not in b for y in a])
                              ^

তবে এটি আমাকে একটি অবৈধ সিনট্যাক্স ত্রুটি দেয় যেখানে এটি ^স্থাপন করা হয়েছে। এই লাম্বা ফাংশনটি সম্পর্কে কী ভুল?


5
নীচে সমস্ত উত্তর সঠিক, কিন্তু b = ('q')একটি tuple তৈরি করে না। এক উপাদান প্রয়োজন একটি সুনির্দিষ্ট সঙ্গে tuples ,হলো,b = ('q',)
— DMG

আমি পরিবর্তিত tuplesহয়েছে iterables।
— অরেঞ্জটাক্স

উত্তর:


187

আপনি আদেশ ভুল পেয়েছি। এর ifপরে হওয়া উচিত for(যদি না এটি কোনও if-elseশ্রেনী অপারেটরে না থাকে)

[y for y in a if y not in b]

এটি তবে কাজ করবে:

[y if y not in b else other_value for y in a]

ধন্যবাদ। আমি এই পোস্টে দেখেছি লাম্বদা ফাংশনে অন্য কোনও বিবৃতি সম্পর্কে stackoverflow.com/questions/4406389/… । এবং আমি ভেবেছিলাম যে শুধুমাত্র যদি বিবৃতি (অন্যটি ছাড়া) ব্যবহার করা একই ক্রমে কাজ করবে।
— অরেঞ্জটাক্স

39

আপনি ifশেষে রাখুন:

[y for y in a if y not in b]

তালিকা অনুধাবনগুলি তাদের নেস্টেড পূর্ণ-নির্দিষ্ট অংশগুলির মতো একই ক্রমে লিখিত হয়, মূলত উপরের বিবৃতিটি অনুবাদ করে:

outputlist = []
for y in a:
    if y not in b:
        outputlist.append(y)

আপনার সংস্করণ পরিবর্তে এটি করার চেষ্টা করেছে:

outputlist = []
if y not in b:
    for y in a:
        outputlist.append(y)

তবে একটি তালিকা বোধগম্যতা কমপক্ষে একটি বহিরাগত লুপ দিয়ে শুরু করা উচিত ।


আপনি খুব সহায়ক হয়েছে। ধন্যবাদ.
— টোলগাহান 21ZÜN

7

তালিকা বোঝার সূত্র:

[<value_when_condition_true> if <condition> else <value_when_condition_false> for value in list_name]

এইভাবে আপনি এটি এটি করতে পারেন:

[y for y in a if y not in b]

কেবল প্রদর্শনের উদ্দেশ্যে: [y যদি y না হয় অন্যথায় y এর জন্য মিথ্যা]


2
আপনি elseকোনও তালিকা বোধগম্যে রাখতে পারেন না , যেখানে আপনি কমপক্ষে একটি রেখেছেন। শর্তসাপেক্ষ অভিব্যক্তি (যা অন্য মানটি বাধ্যতামূলক করে তোলে তার অবশ্যই একটি মান থাকতে হবে) সহ একটি তালিকা উপলব্ধি (ফিল্টারিং) গুলিয়ে ফেলবেন না conf
— মার্টিজন পিটারস

একমত। elseকোড হিসাবে দেখানো হয়েছে যদিও তালিকা বোধগম্য ব্যবহার করুন।
— বিশ্বজিৎ পাঠক

2
এটি একটি শর্তাধীন অভিব্যক্তি । এটি কোনও বৈধ এক্সপ্রেশন প্রযোজ্য যে কোনও জায়গায় ব্যবহার করা যেতে পারে। এটি বোধগম্যতার তালিকা নির্দিষ্ট করে না।
— মার্টিজন পিটারস

5

এটি ল্যাম্বদা ফাংশন নয়। এটি একটি তালিকা বোধগম্যতা।

কেবল অর্ডার পরিবর্তন করুন:

[ y for y in a if y not in b]

-2

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

sent_splt=[['good', 'case,', 'excellent', 'value.'], ['great', 'for', 'the', 'jawbone.'],['tied', 'to', 'charger', 'for', 'conversations', 'lasting', 'more', 'than', '45', 'minutes.major', 'problems!!']]

stop_set = ['the', 'a', 'an', 'i', 'he', 'she', 'they', 'to', 'of', 'it', 'from']

x=[a for a in sent_splt if a not in stop_set]
print(x)

এটি শব্দগুলি ফিল্টার করছে না।


1
আপনার যা করা দরকার তা হল একটি প্রশ্ন জিজ্ঞাসা করা। একটি উত্তর পোস্ট না।
— ঘূর্ণি মাইন্ড

আসলে, এটি আমার কাছে গত 2 দিন থেকে 1 দিনের বিরতির পরে প্রশ্ন পোস্ট করতে বলছে। মূলত আমার আগের প্রশ্নটির কারণে আমাকে প্রশ্ন পোস্ট করার অনুমতি নেই যা স্ট্যাকওভারফ্লো স্ট্যান্ডার্ড অনুযায়ী ছিল না। অসুবিধার জন্য দুঃখিত।
— দীপক ধীমান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.