তালিকা বোধগম্য শর্তসমূহে এলিফ


128

আমরা elifতালিকা বোধগম্য ব্যবহার করতে পারি ?

উদাহরণ:

l = [1, 2, 3, 4, 5]

for values in l:
    if values==1:
        print 'yes'
    elif values==2:
        print 'no'
    else:
        print 'idle'

elifউপরের কোডের সাথে একই রকম ফ্যাশনে আমরা কী আমাদের তালিকা অনুধাবনকে অন্তর্ভুক্ত করতে পারি ?

উদাহরণস্বরূপ, এর মতো একটি উত্তর:

['yes', 'no', 'idle', 'idle', 'idle']

এখন অবধি, আমি কেবল ব্যবহার করেছি ifএবং elseতালিকা বোধগম্য।

উত্তর:


249

পাইথনের শর্তসাপেক্ষ প্রকাশগুলি হ'ল এই ধরণের ব্যবহারের ক্ষেত্রে তৈরি করা হয়েছিল:

>>> l = [1, 2, 3, 4, 5]
>>> ['yes' if v == 1 else 'no' if v == 2 else 'idle' for v in l]
['yes', 'no', 'idle', 'idle', 'idle']

আশাকরি এটা সাহায্য করবে :-)


5
সিনট্যাক্সে কিছু আকর্ষণীয় ইতিহাস রয়েছে। বহু বছর ধরে তাদের পরিচয়ের আগে "তৃতীয় বর্ণ" ভাষাতে পাঁচটি বহুল-অনুরোধের পরিবর্তনের মধ্যে একটি ছিল। যেহেতু গাইডো ভ্যান রসম এটিকে স্পষ্টভাবে বিবৃতি-ভিত্তিক ভাষা হিসাবে নকশা করেছিলেন, তিনি দৃ time়তার সাথে দীর্ঘকাল ধরে প্রতিরোধ করেছিলেন (তৃতীয় স্তর এবং বিশেষত তাদের অপব্যবহার, কোডের ক্ষেত্রে অনেকটা অস্পষ্টতার উত্স)। অবশেষে তিনি যখন মারা যান, তখন তিনি ঘোষণা করেছিলেন যে তিনি ইচ্ছাকৃতভাবে একটি সিনট্যাক্স বেছে নিয়েছেন যা অতিরিক্ত ব্যবহারকে নিরুৎসাহিত করে। যথারীতি, তবুও তিনি একটি মার্জিত ডিজাইনের কাজ করেছিলেন।
হোল্ডেনওয়েব

1
টেরনারী, ড্যাম্মিট (তিনি লিখেছিলেন, সম্পাদনা করতে খুব দেরী করে তার ডিসলেক্সিক ভুলটি লক্ষ্য করেছেন)।
হোল্ডেনওয়েব

2
আমি এই উত্তরটি আপ-আপ করার সময়, আমি এটি উল্লেখ করতে চাই: 1 জোড়ার জন্য যদি / অন্যটি পড়া সহজ হয় তবে 2 জোড়া: এটি বোঝা শক্ত হয়ে উঠছে। এমনকি 3 জোড়া উল্লেখ করবেন না। যদি অভিব্যক্তিটির 3 বা ততোধিক জোড়া প্রয়োজন হয় তবে একটি অভিধান বা একটি পৃথক ফাংশন জিনিসগুলি পড়া এবং বুঝতে সহজ করে তুলবে।
হাই ভু

1
আমি এই সমস্যার কোনও সমাধান নয়, তবে পরিষ্কার কোডের একটি অনুস্মারক যোগ করতে চাই: যেহেতু এই তালিকাটি বোঝার ক্ষেত্রে তিনটি শর্ত রয়েছে, এটি সম্ভবত আরও বর্ণনামূলক পদ্ধতিতে রিফেক্টর করা যেতে পারে। আমার বক্তব্যটি হ'ল : মার্টিনফাউলর / ব্লিকি / ফাংশনএলংথ এইচটিএমএল :)
আলভারো কাভালকান্তি

আমি এমন একটি ক্ষেত্রে হোঁচট খেয়েছি যেখানে আমার একটি এলিফ প্রয়োজন, তবে কেবল দুটি মান। এই উদাহরণটি ব্যবহার করে, আমার কেবল ['yes', 'no']তৈরি করা দরকার ছিল । এই কাজের জন্য, আপনি কি করতে পারেন: ['yes' if v == 1 else 'no' for v in l if values in [1,2]]। আমি বর্তমানে এটি করার কোনও ক্লিনার উপায় সম্পর্কে ভাবতে পারি না।
dTanMan

48
>>> d = {1: 'yes', 2: 'no'}
>>> [d.get(x, 'idle') for x in l]
['yes', 'no', 'idle', 'idle', 'idle']

4
আমি মনে করি এই ফর্মটি হজম করা অনেক সহজ, যদি লিস্টের মধ্যে / অন্য যুক্তি যুক্ত হয় তবে লম্বা এবং জটিল কিছু করার চেষ্টা করার চেয়ে
jdi

5
@ জেডি যদিও শর্তসাপেক্ষ-অভিব্যক্তিগুলি আপনার পছন্দ মতো নাও হতে পারে, ওপিকে যেমন অনুরোধ করেছিল ঠিক তেমনভাবেই তারা এলিফ-এলিফ-অন্য শৃঙ্খলাগুলি পরিচালনা করার জন্য ডিজাইন করা হয়েছিল । তারা শিখতে কঠিন নয় এবং অত্যন্ত শৃঙ্খলার পরিস্থিতি যেমন অভিধান লুকআপ যুক্তিবিজ্ঞান এক্তিয়ারভুক্ত নয় সব ব্যবস্থা করতে সক্ষম: 'A' if grade>=90 else 'B' if grade>=80 else 'C' if grade>=70 else 'F'
রেমন্ড হেটেঞ্জার

1
dবোঝার বাইরে সংজ্ঞায়িত করার সুবিধা থাকলে ?
ক্রিস_ র্যান্ডস

আমার তালিকার বোধগম্যতা আরও ভাল কারণ হ'ল এটি কেবল ইংরেজের মতোই পড়ে। এমনকি একটি অ প্রোগ্রামারও এটি কী করে তা বুঝতে সক্ষম হবে। এই সমাধানের সাথে আপনাকে ডিক্টেজেট () পদ্ধতিটি বুঝতে হবে।
টিম স্কভ জ্যাকবজেন

25

আপনি পারেন, সাজান।

মনে রাখবেন আপনি যখন সিট্যাক্স ব্যবহার করেন তখন:

['yes' if v == 1 else 'no' for v in l]

আপনি যদি / অন্য অপারেটরের (আপনি যদি সি এর মতো ভাষার সাথে পরিচিত হন তবে এটি ?:কনস্ট্রাক্টের মতো (v == 1 ? 'yes' : 'no')) এর তিনটি রূপ ব্যবহার করছেন ।

যদি / অন্য অপারেটরের তিনটি রূপটিতে একটি 'এলিফ' অন্তর্নির্মিত না থাকে তবে আপনি এটি 'অন্য' অবস্থায় অনুকরণ করতে পারেন:

['yes' if v == 1 else 'no' if v == 2 else 'idle' for v in l]

এটি বলার মতো:

for v in l:
    if v == 1 :
        print 'yes'
    else:
        if v == 2:
            print 'no'
        else:
            print 'idle'

সুতরাং আপনার মতো অনুরোধের মতো কোনও 'সরাসরি' এলিফ 'নির্মাণ নেই, তবে এটি নেস্টেড যদি / অন্য বিবৃতি দিয়ে সিমুলেটেড করা যায়।


শেষ অনুচ্ছেদ কোড খুব অন্তর্দৃষ্টিপূর্ণ ধন্যবাদ!
বিচ্যুতি


2

আপনি তালিকা উপলব্ধি ব্যবহার করতে পারেন আপনি আসল থেকে অন্য তালিকা তৈরি করতে যাচ্ছেন।

>>> l = [1, 2, 3, 4, 5]
>>> result_map = {1: 'yes', 2: 'no'}
>>> [result_map[x] if x in result_map else 'idle' for x in l]
['yes', 'no', 'idle', 'idle', 'idle']

2

আর একটি সহজ উপায় শর্তযুক্ত তালিকা বোঝার জন্য এটি ব্যবহার করা:

l=[1,2,3,4,5]
print [[["no","yes"][v==1],"idle"][v!=1 and v!=2] for v in l]

আপনাকে সঠিক বর্ধন দেয়:

['হ্যাঁ', 'না', 'নিষ্কলুষ', 'নিষ্কলুষ', 'নিষ্ক্রিয়']

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