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


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.