দুটি তালিকার সংমিশ্রণ এবং নকলকে সরিয়ে ফেলা, মূল তালিকায় সদৃশ অপসারণ না করে


115

আমার দুটি তালিকাগুলি রয়েছে যা আমার একত্রিত করতে হবে যেখানে দ্বিতীয় তালিকায় প্রথম তালিকার কোনও সদৃশ উপেক্ষা করা আছে। .. ব্যাখ্যা করতে কিছুটা কঠিন, সুতরাং কোডটি দেখতে কেমন, এবং এর ফলস্বরূপ আমি কী চাই তার একটি উদাহরণ দেখি।

first_list = [1, 2, 2, 5]

second_list = [2, 5, 7, 9]

# The result of combining the two lists should result in this list:
resulting_list = [1, 2, 2, 5, 7, 9]

আপনি লক্ষ্য করবেন যে ফলাফলটির প্রথম দুটি তালিকা রয়েছে যার সাথে তার দুটি "2" মান রয়েছে তবে দ্বিতীয়_ তালিকায় অতিরিক্ত 2 এবং 5 মানও প্রথম তালিকায় যুক্ত হয় না।

সাধারণত এর মতো কোনও কিছুর জন্য আমি সেট ব্যবহার করতাম, তবে ফার্স্টলিস্টে থাকা একটি সেট এর ইতিমধ্যে থাকা সদৃশ মানগুলিকে সাফ করবে। সুতরাং আমি কেবল ভাবছি যে এই পছন্দসই সমন্বয়টি অর্জনের সবচেয়ে ভাল / দ্রুততম উপায় wond

ধন্যবাদ।


3
যদি সেখানে তিনটি 2 এস থাকে second_list?
বালফা

@ আলফা: হ্যাঁ, আমি কীভাবে এখনও এটি পরিচালনা করতে চাই তা আমি পুরোপুরি ঠিক করি নি। এটি এমন একটি বিষয় যা আমি ভেবে
দেখেছিলাম

উত্তর:


168

আপনাকে প্রথম তালিকায় যুক্ত করতে হবে দ্বিতীয় তালিকার সেই উপাদানগুলি যা প্রথমটিতে নেই - সেটগুলি কোন উপাদানগুলি সেগুলি নির্ধারণের সবচেয়ে সহজ উপায়, এর মতো:

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

in_first = set(first_list)
in_second = set(second_list)

in_second_but_not_in_first = in_second - in_first

result = first_list + list(in_second_but_not_in_first)
print(result)  # Prints [1, 2, 2, 5, 9, 7]

বা যদি আপনি ওয়ান-লাইনার পছন্দ করেন 8-)

print(first_list + list(set(second_list) - set(first_list)))

2
বা এটির যদি প্রয়োজন হয় তবে এটি সাজান: ফার্স্ট_লিস্ট + সাজানো (সেট (সেকেন্ড_লিস্ট) - সেট (প্রথম তালিকা))
হুগড্রাউন

2
তালিকা (সেট (প্রথম_ তালিকা) | সেট (দ্বিতীয়_ তালিকা)) # | সেট ছেদ দেখুন stackoverflow.com/questions/4674013/...
staticd

1
@ স্ট্যাটিকড: হ্যাঁ, তবে এটি ভুল উত্তর দেয়। 2আপনার ফলাফলের মধ্যে একটি মাত্র আছে , যখন তাদের মধ্যে দুটি হওয়া উচিত।
রিচিহিন্ডল

উফ। তুমি ঠিক বলছো. সম্পূর্ণরূপে মিস হয়েছে যে প্রথম তালিকার সদৃশগুলির অনুমতি ছিল । : পি
স্থিরীকৃত

66
resulting_list = list(first_list)
resulting_list.extend(x for x in second_list if x not in resulting_list)

7
অবশেষে এমন একটি উত্তর যা সেটগুলিতে কাস্টিং জড়িত না! যশ।
সুপারফ্যামাস গুই

4
এটি আসলে ও (এন * মি) তবে এটি কার্যকর হতে পারে যখন আপনার কাছে নন-হ্যাশযোগ্য জিনিসগুলির তালিকা থাকে এবং কার্য সম্পাদন কোনও উদ্বেগের বিষয় নয়
alcuadrado

1
আমি প্রথম বা দ্বিতীয় থেকে কোনও অনুরূপ চাই না?
ডিজেল

এই কৌশলটি তালিকার বৈশিষ্ট্যের ক্রম সংরক্ষণ করে, যা ক্ষেত্রে হয় না set। 👍
সুভাষ ভূষণ

29

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

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

resultList= list(set(first_list) | set(second_list))

print(resultList)
# Results in : resultList = [1,2,5,7,9]

হ্যাঁ ধন্যবাদ আমি পেয়েছি। এটি ভাল কাজ করবে। ফলাফললিস্ট = প্রথম_ তালিকা + তালিকা (সেট (দ্বিতীয়_ তালিকা) -সেট (প্রথম_ তালিকা))
কাঠিরাওয়ান উমাইদুরাই

9

আপনি যদি নম্পি ব্যবহার করেন তবে আপনি এটিকে কোডের একক লাইনে নামিয়ে আনতে পারেন:

a = [1,2,3,4,5,6,7]
b = [2,4,7,8,9,10,11,12]

sorted(np.unique(a+b))

>>> [1,2,3,4,5,6,7,8,9,10,11,12]


5
resulting_list = first_list + [i for i in second_list if i not in first_list]

1
প্রথম তালিকাটি শেষ করুন এবং আপনি "সেট" করুন
u0b34a0f6ae

ফলাফলের তালিকা বাছাই করা হবে না।
অবাক

1
আমি যদি কোনও তালিকাতেও নকল পেতে চাই না তবে কী হবে? এইভাবে যদি কোনও তালিকার সদৃশ থাকে তবে তারা ফিরে আসবে
দেজেল

5

আমার কাছে সবচেয়ে সহজ:

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

merged_list = list(set(first_list+second_list))
print(merged_list)

#prints [1, 2, 5, 7, 9]

1
এটি একটি দুর্দান্ত সমাধান, তবে মনে রাখবেন যে আমরা অভিধানের একটি সেট তৈরি করার চেষ্টা করি যেমন কাজ করবে না উদাহরণস্বরূপ (উত্থাপন করবে TypeError: unhashable type: 'dict')
লাক্সারে

2

আপনি রিচারিহিন্ডল এবং নেড ব্যাচেল্ডারের প্রতিক্রিয়াগুলিকে গড়-কেস হে (এম + এন) অ্যালগরিদমের জন্য একত্রিত করতে পারেন যা অর্ডার সংরক্ষণ করে:

first_list = [1, 2, 2, 5]
second_list = [2, 5, 7, 9]

fs = set(first_list)
resulting_list = first_list + [x for x in second_list if x not in fs]

assert(resulting_list == [1, 2, 2, 5, 7, 9])

লক্ষ্য করুন x in sএকটি খারাপ-কেস জটিলতা রয়েছে হে (ড) , তাই খারাপ-কেস এই কোড জটিলতা এখনও হে (মি * ঢ)


0

এটি সাহায্য করতে পারে

def union(a,b):
    for e in b:
        if e not in a:
            a.append(e)

ইউনিয়ন ফাংশনটি ইতিমধ্যে এটিতে থাকে তবে কোনওটির কোনও উপাদান নকল করে প্রথমে দ্বিতীয় তালিকার একত্রে মিলিয়ে দেয়। সেট ইউনিয়ন অপারেটরের অনুরূপ। এই ফাংশন খ পরিবর্তন হয় না। যদি একটি = [1,2,3] খ = [2,3,4]। ইউনিয়নের পরে (ক, খ) একটি = [1,2,3,4] এবং খ = [২,৩,৪] করে


0

রেসিপি উপর ভিত্তি করে :

ফলাফল_ তালিকা = তালিকা (সেট ()। ইউনিয়ন (প্রথম তালিকা, দ্বিতীয়_ তালিকা)


-2
    first_list = [1, 2, 2, 5]
    second_list = [2, 5, 7, 9]

    newList=[]
    for i in first_list:
        newList.append(i)
    for z in second_list:
        if z not in newList:
            newList.append(z)
    newList.sort()
    print newList

[১, ২, ২, ৫,,, ৯]

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