তালিকাগুলি বোঝার জন্য লুপের জন্য নেস্টেড


88

আমার যদি দুটি স্ট্রিং থাকে 'abc'এবং 'def'আমি লুপের জন্য দুটি ব্যবহার করে সেগুলির সমস্ত সংমিশ্রণ পেতে পারি:

for j in s1:
  for k in s2:
    print(j, k)

তবে আমি তালিকা বোধগম্যতা ব্যবহার করে এটি করতে সক্ষম হতে চাই। আমি অনেক উপায়ে চেষ্টা করেছি, তবে এটি কখনই অর্জন করতে পারেনি। কেউ কি জানেন, এটা কিভাবে করে?

উত্তর:


136
lst = [j + k for j in s1 for k in s2]

বা

lst = [(j, k) for j in s1 for k in s2]

আপনি যদি tuples চান।

প্রশ্নের মতো, for j...বাইরের লুপটি for k...হ'ল অভ্যন্তরীণ লুপ।

অপরিহার্যভাবে, আপনি কেবল একের পর এক স্টিক করে একটি তালিকা বোধগম্যতার জন্য 'এক্স ইন ওয়াই' এর মতো ক্লজগুলির মতো আপনার পক্ষে অনেকগুলি স্বতন্ত্র থাকতে পারেন।


4
আপনি যদি নেস্টেড তালিকার উপরে পুনরাবৃত্তি করতে নেস্টেড লুপটি করতে চান? এর মতো কিছু: [অক্ষরে অক্ষের জন্য কুঠার জন্য প্রিন্ট ('এ') [একটি নয়, কিছুই নয় ...] অবধি লেন (অক্ষ)
পাবলো রুইজ রুইজ

@ পাবলো আমার মনে হয় আপনার লুপগুলি বিপরীত হয়েছে। L1 = [[[e1, e2, ...], ...], ...]->[ e for L2 in L1 for L3 in L2 for e in L3 ]
আনঅ্যাকশনিয়াল ক্যাসোজে

forবিবৃতিগুলির ক্রম একই, যেন আপনি এটি forদুটি পৃথক লাইনে দুটি লুপ হিসাবে লিখেছিলেন ।
বরিস

অ্যারোনাস্টারিং আমি নীচে শর্তযুক্ত বিবৃতি ব্যবহার করতে পারি?
সালিক মালিক

lst = [j+k if BLAHBLAHBLAH for j in s1 for k in s2]বা কিছু
সালিক মালিক

35

যেহেতু এটি মূলত কার্টেসিয়ান পণ্য তাই আপনি এটিরটিওলস প্রোডাক্ট ব্যবহার করতে পারেন । আমি মনে করি এটি পরিষ্কার হয়, বিশেষত যখন আপনার আরও ইনপুট পুনরাবৃত্ত হয়।

itertools.product('abc', 'def', 'ghi')

0

পুনরাবৃত্তি চেষ্টা করুন:

s=""
s1="abc"
s2="def"
def combinations(s,l):
    if l==0:
        print s
    else:
        combinations(s+s1[len(s1)-l],l-1)
        combinations(s+s2[len(s2)-l],l-1)

combinations(s,len(s1))

আপনাকে 8 টি সমন্বয় দেয়:

abc
abf
aec
aef
dbc
dbf
dec
def

ওপির প্রশ্নের সাথে মিল রেখে, আমি মনে করি আউটপুটটি চিঠিগুলির দম্পতিদের দেওয়া উচিত, এবং সেখানে 9 টি সংমিশ্রণ হওয়া উচিত।
মাতটিয়া

কি ঘটেছে: আবদ, আবে, এসিডি, এসি, এসিফ, এডিবি, অ্যাডিসি, এডিএফ, এডিবি, আবেদ, এডিবি, এএফবি, এফসি, এএফডি, এএফ, এবং সি, ই, বা এফ দিয়ে শুরু হওয়া সমস্তগুলি? এমনকি যদি অর্ডার গুরুত্বপূর্ণ নয় বাদ দেওয়া হল: bda থেকে, Ade, ইত্যাদি
হ্যারি Binswanger

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