আমি দুটি তালিকা নিতে এবং উভয়ের মধ্যে প্রদর্শিত মানগুলি খুঁজতে চাই।
a = [1, 2, 3, 4, 5]
b = [9, 8, 7, 6, 5]
returnMatches(a, b)
[5]
উদাহরণস্বরূপ, ফিরে আসবে ।
আমি দুটি তালিকা নিতে এবং উভয়ের মধ্যে প্রদর্শিত মানগুলি খুঁজতে চাই।
a = [1, 2, 3, 4, 5]
b = [9, 8, 7, 6, 5]
returnMatches(a, b)
[5]
উদাহরণস্বরূপ, ফিরে আসবে ।
উত্তর:
সবচেয়ে দক্ষ এক নয়, তবে এটি করার সবচেয়ে সুস্পষ্ট উপায় হ'ল:
>>> a = [1, 2, 3, 4, 5]
>>> b = [9, 8, 7, 6, 5]
>>> set(a) & set(b)
{5}
যদি অর্ডারটি তাৎপর্যপূর্ণ হয় তবে আপনি এটির মতো তালিকা বোঝার সাথে এটি করতে পারেন:
>>> [i for i, j in zip(a, b) if i == j]
[5]
(কেবলমাত্র সমান আকারের তালিকার জন্য কাজ করে, যা অর্ডার-তাত্পর্যটি বোঝায়)।
&
) বা set(a).intersection(b)
তালিকার বোঝাপড়ার চেয়ে দ্রুত বা দ্রুত হবে।
set(a) & set(b)
?
Set.intersication () ব্যবহার করুন , এটি দ্রুত এবং পঠনযোগ্য।
>>> set(a).intersection(b)
set([5])
bool(set(a).intersection(b))
জন্য True
বাFalse
difference
বা union
।
.intersection()
বনাম জন্য কোনও পারফরম্যান্স পার্থক্য আছে &
?
লুটসের সমাধানটি দেখানো একটি দ্রুত পারফরম্যান্স পরীক্ষা সেরা:
import time
def speed_test(func):
def wrapper(*args, **kwargs):
t1 = time.time()
for x in xrange(5000):
results = func(*args, **kwargs)
t2 = time.time()
print '%s took %0.3f ms' % (func.func_name, (t2-t1)*1000.0)
return results
return wrapper
@speed_test
def compare_bitwise(x, y):
set_x = frozenset(x)
set_y = frozenset(y)
return set_x & set_y
@speed_test
def compare_listcomp(x, y):
return [i for i, j in zip(x, y) if i == j]
@speed_test
def compare_intersect(x, y):
return frozenset(x).intersection(y)
# Comparing short lists
a = [1, 2, 3, 4, 5]
b = [9, 8, 7, 6, 5]
compare_bitwise(a, b)
compare_listcomp(a, b)
compare_intersect(a, b)
# Comparing longer lists
import random
a = random.sample(xrange(100000), 10000)
b = random.sample(xrange(100000), 10000)
compare_bitwise(a, b)
compare_listcomp(a, b)
compare_intersect(a, b)
এগুলি আমার মেশিনে ফলাফল:
# Short list:
compare_bitwise took 10.145 ms
compare_listcomp took 11.157 ms
compare_intersect took 7.461 ms
# Long list:
compare_bitwise took 11203.709 ms
compare_listcomp took 17361.736 ms
compare_intersect took 6833.768 ms
স্পষ্টতই, যে কোনও কৃত্রিম পারফরম্যান্স পরীক্ষা নুনের দানা দিয়ে নেওয়া উচিত, তবে যেহেতু set().intersection()
উত্তরটি অন্যান্য সমাধানগুলির মতো কমপক্ষে তত দ্রুত এবং সবচেয়ে পঠনযোগ্য, তাই এই সাধারণ সমস্যার জন্য এটি স্ট্যান্ডার্ড সমাধান হওয়া উচিত।
set
একটি বিদ্যমান থেকে নতুন তৈরি করা list
আসল থেকে কোনও কিছুই মুছে ফেলবে না list
। যদি আপনি কোনও তালিকার মধ্যে সদৃশগুলি হ্যান্ডেল করার জন্য বিশেষ যুক্তি চান তবে আমার মনে হয় আপনাকে একটি নতুন প্রশ্ন জিজ্ঞাসা করতে হবে কারণ ডুপ্লিকেটগুলি কীভাবে পরিচালনা করতে চান তার উত্তরটি নির্দিষ্ট হওয়া দরকার।
আমি সেট ভিত্তিক উত্তরগুলি পছন্দ করি তবে এখানে যে কোনওভাবেই কাজ করে
[x for x in a if x in b]
দ্রুত উপায়:
list(set(a).intersection(set(b)))
>>> s = ['a','b','c']
>>> f = ['a','b','d','c']
>>> ss= set(s)
>>> fs =set(f)
>>> print ss.intersection(fs)
**set(['a', 'c', 'b'])**
>>> print ss.union(fs)
**set(['a', 'c', 'b', 'd'])**
>>> print ss.union(fs) - ss.intersection(fs)
**set(['d'])**
আপনি কি নকল চান? যদি না হয় তবে এর পরিবর্তে আপনার সেটগুলি ব্যবহার করা উচিত:
>>> set([1, 2, 3, 4, 5]).intersection(set([9, 8, 7, 6, 5]))
set([5])
a = [1, 2, 3, 4, 5]
b = [9, 8, 7, 6, 5]
lista =set(a)
listb =set(b)
print listb.intersection(lista)
returnMatches = set(['5']) #output
print " ".join(str(return) for return in returnMatches ) # remove the set()
5 #final output
তুমি ব্যবহার করতে পার:
a = [1, 3, 4, 5, 9, 6, 7, 8]
b = [1, 7, 0, 9]
same_values = set(a) & set(b)
print same_values
আউটপুট:
set([1, 7, 9])
আপনি যদি বুলিয়ান মান চান:
>>> a = [1, 2, 3, 4, 5]
>>> b = [9, 8, 7, 6, 5]
>>> set(b) == set(a) & set(b) and set(a) == set(a) & set(b)
False
>>> a = [3,1,2]
>>> b = [1,2,3]
>>> set(b) == set(a) & set(b) and set(a) == set(a) & set(b)
True
নিম্নলিখিত সমাধান তালিকার আইটেমগুলির যে কোনও ক্রমের জন্য কাজ করে এবং উভয় তালিকাকে পৃথক দৈর্ঘ্য হিসাবে সমর্থন করে।
import numpy as np
def getMatches(a, b):
matches = []
unique_a = np.unique(a)
unique_b = np.unique(b)
for a in unique_a:
for b in unique_b:
if a == b:
matches.append(a)
return matches
print(getMatches([1, 2, 3, 4, 5], [9, 8, 7, 6, 5, 9])) # displays [5]
print(getMatches([1, 2, 3], [3, 4, 5, 1])) # displays [1, 3]
np.intersect1d(list1, list2)
you can | for set union and & for set intersection.
for example:
set1={1,2,3}
set2={3,4,5}
print(set1&set2)
output=3
set1={1,2,3}
set2={3,4,5}
print(set1|set2)
output=1,2,3,4,5
curly braces in the answer.
&
সেটটিতে অপারেটরের ব্যবহার ইতিমধ্যে সাইলেন্টগোস্টের গৃহীত উত্তরে উত্তর