কি "এক [...] সুস্পষ্ট পথ" একটি বিদ্যমান একটি iterable সব আইটেমগুলি যোগ করার set
?
কি "এক [...] সুস্পষ্ট পথ" একটি বিদ্যমান একটি iterable সব আইটেমগুলি যোগ করার set
?
উত্তর:
আপনি একটি উপাদান যোগ করতে পারেন list
একটি থেকে set
ভালো:
>>> foo = set(range(0, 4))
>>> foo
set([0, 1, 2, 3])
>>> foo.update(range(2, 6))
>>> foo
set([0, 1, 2, 3, 4, 5])
set
নির্মাতা তার আর্গুমেন্ট হিসাবে পুনরাবৃত্ত হয়।
{1, 2, 3}
পাইথন 3 যেহেতু এটি ছিল set([1, 2, 3])
পাইথন 2.
যে কেউ বিশ্বাস করতে পারে তার উপকারের জন্য যেমন aset.add()
একটি লুপে কাজ করার সাথে প্রতিযোগিতামূলক দক্ষতা অর্জন করতে পারে aset.update()
, এখানে জনসাধারণের আগে আপনি কীভাবে আপনার বিশ্বাসকে দ্রুত পরীক্ষা করতে পারেন তার একটি উদাহরণ এখানে:
>\python27\python -mtimeit -s"it=xrange(10000);a=set(xrange(100))" "a.update(it)"
1000 loops, best of 3: 294 usec per loop
>\python27\python -mtimeit -s"it=xrange(10000);a=set(xrange(100))" "for i in it:a.add(i)"
1000 loops, best of 3: 950 usec per loop
>\python27\python -mtimeit -s"it=xrange(10000);a=set(xrange(100))" "a |= set(it)"
1000 loops, best of 3: 458 usec per loop
>\python27\python -mtimeit -s"it=xrange(20000);a=set(xrange(100))" "a.update(it)"
1000 loops, best of 3: 598 usec per loop
>\python27\python -mtimeit -s"it=xrange(20000);a=set(xrange(100))" "for i in it:a.add(i)"
1000 loops, best of 3: 1.89 msec per loop
>\python27\python -mtimeit -s"it=xrange(20000);a=set(xrange(100))" "a |= set(it)"
1000 loops, best of 3: 891 usec per loop
দেখে মনে হচ্ছে লুপ পদ্ধতির প্রতি আইটেমের ব্যয়টি পদ্ধতির চেয়ে তিনগুণ বেশি update
।
ব্যবহার |= set()
1.5x কী খরচ update
করে কিন্তু কি প্রতিটি আইটেমের যুক্ত করতে একটি লুপ না অর্ধেক।
পুনরাবৃত্তিকে একটি সেটে রূপান্তর করতে আপনি সেট () ফাংশনটি ব্যবহার করতে পারেন এবং তারপরে আপনার নতুন সেট থেকে অনন্য মানগুলিকে বিদ্যমান একটিতে যুক্ত করতে স্ট্যান্ডার্ড সেট আপডেট অপারেটর (| =) ব্যবহার করতে পারেন।
>>> a = { 1, 2, 3 }
>>> b = ( 3, 4, 5 )
>>> a |= set(b)
>>> a
set([1, 2, 3, 4, 5])
.update
সুবিধা যে যুক্তি কোনো iterable -not অগত্যা এর RHS অসদৃশ একটি set- করা যাবে |=
আপনার উদাহরণে অপারেটর।
|
জন্য, &
ছেদ করার জন্য, এবং ^
উপাদানগুলি এক বা অন্যটিতে রয়েছে তবে উভয়ের নয় both তবে গতিশীল টাইপিত ভাষায় যেখানে কোডটি পড়তে এবং চারপাশে উড়তে থাকা অবজেক্টের ধরণগুলি জানার জন্য মাঝে মাঝে অসুবিধা হয়, আমি এই অপারেটরগুলি ব্যবহার করতে দ্বিধা বোধ করি। যে কেউ তাদের চিনতে পারে না (বা সম্ভবত এটি বুঝতেও পারে না যে পাইথন এগুলির মতো অপারেটরদের অনুমতি দেয়) বিভ্রান্ত হতে পারে এবং মনে করে কিছু অদ্ভুত বিটওয়াস বা যৌক্তিক ক্রিয়াকলাপ চলছে। এই অপারেটররা অন্যান্য পুনরাবৃত্তদের উপরও যদি কাজ করত তবে ভালো লাগবে ...
.update()
এবং একটি লুপে পৃথক উপাদান যুক্ত করুন। .update()
দ্রুত ছিল যে পাওয়া গেছে । : আমি এই বিদ্যমান উত্তর আমার ফলাফল যোগ stackoverflow.com/a/4046249/901641
অজগর 3 ব্যবহারের সময় মাত্র একটি দ্রুত আপডেট:
#!/usr/local/bin python3
from timeit import Timer
a = set(range(1, 100000))
b = list(range(50000, 150000))
def one_by_one(s, l):
for i in l:
s.add(i)
def cast_to_list_and_back(s, l):
s = set(list(s) + l)
def update_set(s,l):
s.update(l)
ফলাফলগুলি হ'ল:
one_by_one 10.184448844986036
cast_to_list_and_back 7.969255169969983
update_set 2.212590195937082
তালিকা বোধগম্যতা ব্যবহার করুন।
উদাহরণস্বরূপ একটি তালিকা ব্যবহার করে পুনরাবৃত্তিযোগ্য তৈরির সংক্ষিপ্তসার :)
>>> x = [1, 2, 3, 4]
>>>
>>> k = x.__iter__()
>>> k
<listiterator object at 0x100517490>
>>> l = [y for y in k]
>>> l
[1, 2, 3, 4]
>>>
>>> z = Set([1,2])
>>> z.update(l)
>>> z
set([1, 2, 3, 4])
>>>
[সম্পাদনা: প্রশ্নের সেট অংশটি মিস করেছেন]
for item in items:
extant_set.add(item)
রেকর্ডটির জন্য, আমি দৃ think়ভাবে মনে করি যে "এখানে একটি হওয়া উচিত - এবং এটি করার পক্ষে কেবলমাত্র একটি - স্পষ্ট উপায়"। বোগাস এটি এমন একটি ধারণা তৈরি করে যা অনেক প্রযুক্তিবিদ মনের লোকেরা করে, যে প্রত্যেকে একইভাবে চিন্তা করে। একজনের কাছে যা স্পষ্ট তা অন্যের কাছে এতটা সুস্পষ্ট নয়।
আমি যুক্তি দিয়ে বলব যে আমার প্রস্তাবিত সমাধানটি পরিষ্কারভাবে পাঠযোগ্য, এবং আপনি যা চান তা করেন does এর সাথে জড়িত কোনও পারফরম্যান্স হিট রয়েছে বলে আমি বিশ্বাস করি না - যদিও আমি স্বীকার করি যে আমি কিছু মিস করছি। তবে এত কিছুর পরেও এটি অন্য বিকাশকারীদের কাছে সম্ভবত সুস্পষ্ট এবং পছন্দনীয় নয়।
aset.update(iterable)
সি গতিতে for item in iterable: aset.add(item)
লুপ করছেন সেখানে পাইথন গতিতে লুপ রয়েছে, একটি পদ্ধতি অনুসন্ধান এবং আইটেম প্রতি পদ্ধতি কল (আড়ালঘা !!)।