কীভাবে দু'টি ফ্রেম করবেন তালিকার বোধগম্যের অজগরটির জন্য


107

নীচে হিসাবে আমার দুটি তালিকা আছে

tags = [u'man', u'you', u'are', u'awesome']
entries = [[u'man', u'thats'],[ u'right',u'awesome']]

entriesএগুলি এলে আমি এন্ট্রিগুলি বের করতে চাই tags:

result = []

for tag in tags:
    for entry in entries:
        if tag in entry:
            result.extend(entry)

আমি কীভাবে একটি একক লাইন তালিকা অনুধাবন হিসাবে দুটি লুপ লিখতে পারি?


4
itertools.chainআপনি যদি সমতল তালিকা চান তবে ব্যবহার করুন :list(chain.from_iterable(entry for tag in tags for entry in entries if tag in entry))
অশ্বিনী চৌধুরী চৌধুরী

উত্তর:


146

এটি করা উচিত:

[entry for tag in tags for entry in entries if tag in entry]

164

এটি মনে রাখার সর্বোত্তম উপায় হ'ল তালিকার বোধের ভিতরে লুপের ক্রমটি সেই ক্রমের উপর ভিত্তি করে যেখানে তারা traditionalতিহ্যগত লুপ পদ্ধতির উপস্থিত হয়। বাইরের বেশিরভাগ লুপটি প্রথমে আসে এবং তারপরে অভ্যন্তরীণ লুপগুলি পরে আসে।

সুতরাং, সমতুল্য তালিকা বোধগম্যতা হবে:

[entry for tag in tags for entry in entries if tag in entry]

সাধারণভাবে, if-elseবিবৃতিটি লুপের জন্য প্রথমের আগে আসে, এবং আপনার যদি কেবল ifবিবৃতি থাকে, এটি শেষে আসবে। উদাহরণস্বরূপ, আপনি যদি খালি তালিকা যুক্ত করতে চান, যদি tagপ্রবেশে না থাকে তবে আপনি এটি এটি করতে পারেন:

[entry if tag in entry else [] for tag in tags for entry in entries]

6

উপযুক্ত এলসি হবে

[entry for tag in tags for entry in entries if tag in entry]

এলসিতে লুপের ক্রমটি নেস্টেড লুপগুলির সাথে একই রকম, যদি বিবৃতি শেষ হয় এবং শর্তসাপেক্ষ প্রকাশগুলি শুরুতে যায়, এর মতো কিছু

[a if a else b for a in sequence]

ডেমো দেখুন -

>>> tags = [u'man', u'you', u'are', u'awesome']
>>> entries = [[u'man', u'thats'],[ u'right',u'awesome']]
>>> [entry for tag in tags for entry in entries if tag in entry]
[[u'man', u'thats'], [u'right', u'awesome']]
>>> result = []
    for tag in tags:
        for entry in entries:
            if tag in entry:
                result.append(entry)


>>> result
[[u'man', u'thats'], [u'right', u'awesome']]

সম্পাদনা - যেহেতু, ফলকে সমতল করার জন্য আপনার প্রয়োজন, আপনি অনুরূপ তালিকা বোধগম্যতা ব্যবহার করতে পারেন এবং তারপরে ফলাফলগুলি সমতল করতে পারেন।

>>> result = [entry for tag in tags for entry in entries if tag in entry]
>>> from itertools import chain
>>> list(chain.from_iterable(result))
[u'man', u'thats', u'right', u'awesome']

এটি একসাথে যুক্ত করা, আপনি ঠিক করতে পারেন

>>> list(chain.from_iterable(entry for tag in tags for entry in entries if tag in entry))
[u'man', u'thats', u'right', u'awesome']

আপনি এখানে তালিকার বোঝার পরিবর্তে একটি জেনারেটর এক্সপ্রেশন ব্যবহার করেন। (পুরোপুরি character৯ টি অক্ষরের সীমাটির সাথে পুরোপুরি মেলে ( listকল ছাড়াই ))


2
tags = [u'man', u'you', u'are', u'awesome']
entries = [[u'man', u'thats'],[ u'right',u'awesome']]

result = []
[result.extend(entry) for tag in tags for entry in entries if tag in entry]

print(result)

আউটপুট:

['man', 'thats', 'right', 'awesome']

0

বোধগম্যতায় নেস্টেড তালিকাগুলি পুনরাবৃত্তিকে লুপগুলির জন্য সমতুল্য সমতুল্য তুলনায় একই ক্রম অনুসরণ করা উচিত।

বুঝতে, আমরা এনএলপি থেকে একটি সাধারণ উদাহরণ নেব। আপনি বাক্যগুলির তালিকা থেকে সমস্ত শব্দের একটি তালিকা তৈরি করতে চান যেখানে প্রতিটি বাক্য শব্দের একটি তালিকা।

>>> list_of_sentences = [['The','cat','chases', 'the', 'mouse','.'],['The','dog','barks','.']]
>>> all_words = [word for sentence in list_of_sentences for word in sentence]
>>> all_words
['The', 'cat', 'chases', 'the', 'mouse', '.', 'The', 'dog', 'barks', '.']

পুনরাবৃত্তি শব্দগুলি সরাতে আপনি একটি তালিকার পরিবর্তে একটি সেট use use ব্যবহার করতে পারেন []

>>> all_unique_words = list({word for sentence in list_of_sentences for word in sentence}]
>>> all_unique_words
['.', 'dog', 'the', 'chase', 'barks', 'mouse', 'The', 'cat']

বা প্রয়োগ list(set(all_words))

>>> all_unique_words = list(set(all_words))
['.', 'dog', 'the', 'chases', 'barks', 'mouse', 'The', 'cat']

0
return=[entry for tag in tags for entry in entries if tag in entry for entry in entry]

6
হাই ও স্ট্যাক ওভারফ্লোতে স্বাগতম! একটি বিবরণ পোস্ট করুন এবং না শুধুমাত্র কোড।
এভলিন

4
হ্যালো! এই কোডটি কীভাবে এবং কেন সমস্যার সমাধান করে তার ব্যাখ্যা সহ প্রশ্নটি সমাধান করতে পারে যদিও আপনার পোস্টের মান উন্নত করতে সত্যই সহায়তা করবে এবং সম্ভবত আরও বেশি ভোটের ফলাফল হবে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, কেবল এখন যে ব্যক্তি জিজ্ঞাসা করছেন তা নয়। দয়া করে সম্পাদনা ব্যাখ্যা যোগ করতে পারেন এবং সীমাবদ্ধতা এবং অনুমানের কি প্রয়োগ একটি ইঙ্গিত দিতে আপনার উত্তর।
ব্রায়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.