সেট থেকে কোনও উপাদান অপসারণ না করে কীভাবে পুনরুদ্ধার করবেন?


426

মনে করুন নিম্নলিখিতগুলি:

>>> s = set([1, 2, 3])

আমি কিভাবে বাইরে একটি মান (যে কোন মান) পেতে পারি sনা করে s.pop()? আমি এটিকে অপসারণ করতে পারছি না হওয়া অবধি আমি সেটটিতে আইটেমটি রেখে যেতে চাই - এমন কিছু বিষয় যা আমি কেবল অন্য হোস্টের কাছে অ্যাসিঙ্ক্রোনাস কল করার পরে নিশ্চিত হতে পারি।

দ্রুত এবং ময়লা:

>>> elem = s.pop()
>>> s.add(elem)

তবে আপনি কি আরও ভাল উপায় জানেন? আদর্শভাবে ধ্রুব সময়ে।


8
যে কেউ অজানা কেন ইতিমধ্যে এই ফাংশনটি প্রয়োগ করে না?
hlin117

ব্যবহারের ক্ষেত্রে কী? কোনও কারণে কোনও কারণে সেটটির এই ক্ষমতা নেই। আপনি এটির মাধ্যমে পুনরাবৃত্তি করতে চান এবং সম্পর্কিত ক্রিয়াকলাপগুলি সেট করুন যাতে unionএটি থেকে উপাদান না নেয় set উদাহরণস্বরূপ next(iter({3,2,1}))সর্বদা ফিরে আসে 1তাই আপনি যদি ভাবেন যে এলোমেলো উপাদান ফিরে আসবে - এটি হবে না। সুতরাং আপনি কি শুধু ভুল তথ্য কাঠামো ব্যবহার করছেন? ব্যবহারের ক্ষেত্রে কী?
user1685095

1
সম্পর্কিত: স্ট্যাকওভারফ্লো.com / প্রশ্নগুলি / ২০6২৫৫79 / / ((আমি জানি, এটি একই প্রশ্ন নয়, তবে সেখানে সার্থক বিকল্প এবং অন্তর্দৃষ্টি রয়েছে))
জন ওয়াই

@ hlin117 কারণ সেটটি একটি নিরক্ষিত সংগ্রহ । যেহেতু কোনও আদেশ প্রত্যাশিত নয়, তাই নির্দিষ্ট অবস্থানে থাকা কোনও উপাদান পুনরুদ্ধার করার কোনও ধারণা নেই - এটি এলোমেলোভাবে প্রত্যাশিত।
জাইকোমন

উত্তর:


545

দুটি বিকল্পের জন্য পুরো সেটটি অনুলিপি করার প্রয়োজন নেই:

for e in s:
    break
# e is now an element from s

অথবা ...

e = next(iter(s))

তবে সাধারণভাবে সেটগুলি ইনডেক্সিং বা স্লাইসিং সমর্থন করে না।


4
এটি আমার প্রশ্নের উত্তর দেয়। হায়, আমি অনুমান করি যে আমি এখনও পপ () ব্যবহার করব, যেহেতু পুনরাবৃত্তি উপাদানগুলিকে সাজিয়ে তোলে। আমি এলোমেলো ক্রমে তাদের পছন্দ করব ...
ডারেন টমাস

9
আমি মনে করি না যে ইটার () উপাদানগুলি বাছাই করছে - যখন আমি একটি সেট তৈরি করি এবং পপ () খালি না করা অবধি, আমি ধারাবাহিকভাবে (সাজানো, আমার উদাহরণে) ক্রম পেয়েছি এবং এটি পুনরাবৃত্তকারী হিসাবে সমান - পপ ( ) "আমি কিছুই প্রতিশ্রুতি দিচ্ছি" তেমন স্বেচ্ছাসেবীভাবে এলোমেলো অর্ডার দেওয়ার প্রতিশ্রুতি দেয় না।
ব্লেয়ার কনরাড

2
+1 iter(s).next()স্থূল নয় তবে দুর্দান্ত। যেকোন পুনরাবৃত্তিযোগ্য অবজেক্ট থেকে স্বেচ্ছাসেবী উপাদান নিতে সম্পূর্ণ সাধারণ। আপনার সংগ্রহটি যদি সংগ্রহটি খালি হয় তবে সাবধানতা অবলম্বন করতে চান।
u0b34a0f6ae

8
পরবর্তী (এর) গুলিও ঠিক আছে এবং আমার মনে হয় এটি আরও ভাল পড়ে reads এছাড়াও, খালি থাকা অবস্থায় আপনি কেসটি পরিচালনা করতে সেন্ডিনেল ব্যবহার করতে পারেন। যেমন পরবর্তী (ইটার (গুলি), সেট ())।
জা

5
next(iter(your_list or []), None)কোনও সেট এবং খালি সেট হ্যান্ডেল করতে
মিঃ

110

সর্বনিম্ন কোডটি হবে:

>>> s = set([1, 2, 3])
>>> list(s)[0]
1

স্পষ্টতই এটি একটি নতুন তালিকা তৈরি করবে যাতে সেটটির প্রতিটি সদস্য থাকে, তাই আপনার সেটটি খুব বড় হলে দুর্দান্ত নয়।


95
next(iter(s))কেবল তিনটি অক্ষর অতিক্রম list(s)[0]করে এবং সময় এবং স্থান উভয় জটিলতায় নাটকীয়ভাবে সর্বোত্তম is সুতরাং, যদিও "ন্যূনতম কোড" এর দাবি তুচ্ছভাবে সত্য, তুচ্ছভাবে সত্য যে এটিই সবচেয়ে খারাপ সম্ভাবনা। এমনকি ম্যানুয়ালি মুছে ফেলা এবং তারপরে মুছে ফেলা উপাদানটিকে মূল সেটে পুনরায় যুক্ত করা "কেবলমাত্র প্রথম উপাদানটি বের করার জন্য একটি সম্পূর্ণ নতুন ধারক তৈরি করা", যা স্পষ্টতই উন্মাদ to আমার কাছে সবচেয়ে বেশি উদ্বেগজনক বিষয় হ'ল 38 স্ট্যাকওভারফ্লাওয়ারগুলি আসলে এটির উন্নতি করেছে। আমি শুধু জানি আমি প্রডাকশন কোডে এটি দেখতে পাব।
সিসিল কারি

19
@ অগুরার: কারণ এটি তুলনামূলক সহজ পদ্ধতিতে কাজটি করে। এবং কখনও কখনও তাত্ক্ষণিক স্ক্রিপ্টে এটি গুরুত্বপূর্ণ matters
টোনিসডজি

4
@ ভিক্রোবোট হ্যাঁ তবে এটি পুরো সংগ্রহটি অনুলিপি করে এবং ও (1) অপারেশনকে ও (এন) অপারেশনে রূপান্তরিত করে তা করে। এটি এমন এক ভয়ানক সমাধান যা কখনই ব্যবহার করা উচিত নয়।
augurar

9
এছাড়াও যদি আপনি কেবল "সর্বনিম্ন কোড" (যা বোবা) এর জন্য লক্ষ্য রাখছেন তবে এর min(s)চেয়ে ভয়াবহ এবং অদক্ষ হয়ে ওঠার পরেও আরও কম অক্ষর ব্যবহার করুন।
augurar

5
কোড গল্ফ বিজয়ীর জন্য +1, যা আমার কাছে "ভয়ঙ্কর এবং অদক্ষ" হওয়ার জন্য ব্যবহারিক পাল্টা নমুনা রয়েছে: 1 মাপের সেটগুলির min(s)তুলনায় কিছুটা দ্রুত next(iter(s))এবং আমি এই উত্তরটিতে এসেছি বিশেষভাবে সেটগুলি থেকে একমাত্র উপাদানটি বের করে বিশেষ-কেস খুঁজছি আকারের 1.
লেহিয়েস্টার

48

আমি ভাবলাম কীভাবে বিভিন্ন সেটগুলির জন্য কার্য সম্পাদন করবে, তাই আমি একটি মানদণ্ড করেছি:

from random import sample

def ForLoop(s):
    for e in s:
        break
    return e

def IterNext(s):
    return next(iter(s))

def ListIndex(s):
    return list(s)[0]

def PopAdd(s):
    e = s.pop()
    s.add(e)
    return e

def RandomSample(s):
    return sample(s, 1)

def SetUnpacking(s):
    e, *_ = s
    return e

from simple_benchmark import benchmark

b = benchmark([ForLoop, IterNext, ListIndex, PopAdd, RandomSample, SetUnpacking],
              {2**i: set(range(2**i)) for i in range(1, 20)},
              argument_name='set size',
              function_aliases={first: 'First'})

b.plot()

এখানে চিত্র বর্ণনা লিখুন

এই প্লটটি পরিষ্কারভাবে দেখায় যে কিছু পদ্ধতির ( RandomSample, SetUnpackingএবং ListIndex) সেট আকারের উপর নির্ভর করে এবং সাধারণ ক্ষেত্রে এড়ানো উচিত (কমপক্ষে যদি পারফরম্যান্স গুরুত্বপূর্ণ হতে পারে)। অন্যান্য উত্তর দ্বারা ইতিমধ্যে দেখানো দ্রুততম উপায় ForLoop

তবে যতক্ষণ না ধ্রুব সময়গুলির মধ্যে একটি ব্যবহার করা হয় ততক্ষণ পারফরম্যান্সের পার্থক্য নগণ্য হবে।


iteration_utilities(অস্বীকৃতি: আমি লেখক) এই ব্যবহারের ক্ষেত্রে একটি সুবিধাজনক ফাংশন রয়েছে first:

>>> from iteration_utilities import first
>>> first({1,2,3,4})
1

আমি এটি উপরের মানদণ্ডেও অন্তর্ভুক্ত করেছি। এটি অন্য দুটি "দ্রুত" সমাধানগুলির সাথে প্রতিযোগিতা করতে পারে তবে পার্থক্যটি কোনওভাবেই হয় না।


43

TL; ড

for first_item in muh_set: breakপাইথন 3.x এ সর্বোত্তম পন্থা অবশেষ অভিশাপ, গাইডো

তুমি এই কর

পাইথন ৩.x সময়সীমার আরও একটি সেটে আপনাকে স্বাগতম, কব্জি থেকে এক্সট্রাপোলেটেড অসাধারণ পাইথন 2.x-নির্দিষ্ট প্রতিক্রিয়া । ভিন্ন AChampion 'সমানভাবে সহায়ক গুলি পাইথন 3.x-নির্দিষ্ট প্রতিক্রিয়া , সময় নিচের এছাড়াও সময় উপরে প্রস্তাবিত সমাধান Outlier - যার মধ্যে আছে:

গ্রেট জয়ের জন্য কোড স্নিপেটস

চালু করুন, টিউন করুন, সময় করুন:

from timeit import Timer

stats = [
    "for i in range(1000): \n\tfor x in s: \n\t\tbreak",
    "for i in range(1000): next(iter(s))",
    "for i in range(1000): s.add(s.pop())",
    "for i in range(1000): list(s)[0]",
    "for i in range(1000): random.sample(s, 1)",
]

for stat in stats:
    t = Timer(stat, setup="import random\ns=set(range(100))")
    try:
        print("Time for %s:\t %f"%(stat, t.timeit(number=1000)))
    except:
        t.print_exc()

দ্রুত নিরবচ্ছিন্ন সময়হীন সময়

দেখ! দ্রুততম থেকে স্লো স্নিপেটের আদেশ দেওয়া:

$ ./test_get.py
Time for for i in range(1000): 
    for x in s: 
        break:   0.249871
Time for for i in range(1000): next(iter(s)):    0.526266
Time for for i in range(1000): s.add(s.pop()):   0.658832
Time for for i in range(1000): list(s)[0]:   4.117106
Time for for i in range(1000): random.sample(s, 1):  21.851104

পুরো পরিবারের মুখোমুখি

আশ্চর্যজনকভাবে, ম্যানুয়াল পুনরাবৃত্তি পরবর্তী দ্রুততম সমাধানের চেয়ে কমপক্ষে দ্বিগুণ দ্রুত থেকে যায়। যদিও ব্যাড ওল্ড পাইথন ২.x দিন থেকে ব্যবধান হ্রাস পেয়েছে (যার মধ্যে ম্যানুয়াল পুনরাবৃত্তি কমপক্ষে চারগুণ দ্রুত ছিল) তবে এটি আমার মধ্যে পিইপি ২০ জিলিয়টকে হতাশ করে যে সবচেয়ে ভার্জোজ সমাধানই সেরা। অন্তত সেটটির প্রথম উপাদানটি বের করার জন্য কোনও সেটকে একটি তালিকায় অন্তত রূপান্তর করা প্রত্যাশার মতো ভয়াবহ। গুইডোকে ধন্যবাদ, তাঁর আলো আমাদেরকে চালিয়ে যেতে পারে may

আশ্চর্যজনকভাবে, আরএনজি-ভিত্তিক সমাধানটি একেবারে ভয়ঙ্কর। তালিকার রূপান্তরটি খারাপ, তবে random সত্যই ভয়াবহ সস কেক লাগে। র্যান্ডম নাম্বার for শ্বরের পক্ষে এত কিছু ।

আমি কেবল ইচ্ছামত কামনা করি তারা set.get_first()ইতিমধ্যে আমাদের জন্য একটি পদ্ধতি তৈরি করবে। আপনি যদি এটি পড়ছেন, তারা: "দয়া করে something কিছু করুন" "


2
আমি মনে করি যে এটি next(iter(s)) তুলনায় দ্বিগুণ ধীর গতির অভিযোগ for x in s: breakকরা CPythonএক ধরণের অদ্ভুত। আমি বলতে চাইছি CPython। এটি সি বা হাস্কেলের চেয়ে ধীরে ধীরে প্রায় 50-100 গুণ (বা এর মতো কিছু) হবে (বেশিরভাগ সময়, বিশেষত পুনরাবৃত্তির ক্ষেত্রে, কোনও লেজ কল নির্মূলকরণ এবং কোনও অনুকূলিতকরণ নয়।)। কিছু মাইক্রোসেকেন্ড হারিয়ে ফেললে আসল পার্থক্য আসে না। ভাবছেন না? এবং
পাইপাইও রয়েছে

39

বিভিন্ন পদ্ধতির পিছনে কিছু টাইমিং ফিগার সরবরাহ করতে, নিম্নলিখিত কোডটি বিবেচনা করুন। প্রাপ্তি () পাইথনের সেটোবজেক্ট.সি-তে আমার কাস্টম সংযোজন, এটি উপাদানটি সরিয়ে না ফেলে কেবল পপ ()।

from timeit import *

stats = ["for i in xrange(1000): iter(s).next()   ",
         "for i in xrange(1000): \n\tfor x in s: \n\t\tbreak",
         "for i in xrange(1000): s.add(s.pop())   ",
         "for i in xrange(1000): s.get()          "]

for stat in stats:
    t = Timer(stat, setup="s=set(range(100))")
    try:
        print "Time for %s:\t %f"%(stat, t.timeit(number=1000))
    except:
        t.print_exc()

আউটপুটটি হ'ল:

$ ./test_get.py
Time for for i in xrange(1000): iter(s).next()   :       0.433080
Time for for i in xrange(1000):
        for x in s:
                break:   0.148695
Time for for i in xrange(1000): s.add(s.pop())   :       0.317418
Time for for i in xrange(1000): s.get()          :       0.146673

এর অর্থ হল / বিরতির সমাধানটি দ্রুত (কখনও কখনও কাস্টম গেট () সমাধানের চেয়ে দ্রুত)।


কারও কি ধারণা আছে যে ইটার (গুলি)। এনেক্সট () অন্যান্য সম্ভাবনার তুলনায় এতটা ধীর, এমনকি এস.এডিডি (এস.পপ ()) এর চেয়েও ধীর? আমার কাছে এটির মতো খারাপ ডিজাইন () এবং পরের () এর মত সময় যদি এমনভাবে দেখায় তবে মনে হয়।
পেশেচ

এক জন্য যে লাইন প্রতিটি পুনরাবৃত্তি একটি নতুন iter অবজেক্ট তৈরি করে।
রায়ান

3
@ রায়ান: একটি পুনরুক্তি করা অবজেক্টটিও স্পষ্টভাবে তৈরি করা হয়নি for x in s? "ফলাফলের জন্য একটি পুনরুক্তি তৈরি করা হয় expression_list।"
মসিফিল

2
@ মুসিফিল এটি সত্য; মূলত আমি "ব্রেক" মিস করেছি যা 0.14-এ রয়েছে, এটি আসলে পাল্টা স্বজ্ঞাত। আমি সময় পেলে এটিতে একটি গভীর ডুব দিতে চাই।
রায়ান

1
আমি জানি এই পুরানো, কিন্তু যখন যোগ s.remove()মধ্যে মিশ্রিত করা iterউদাহরণ উভয় forএবং itercatastrophically খারাপ যান।
আছাম্পিয়ন

28

যেহেতু আপনি একটি এলোমেলো উপাদান চান তাই এটি কাজ করবে:

>>> import random
>>> s = set([1,2,3])
>>> random.sample(s, 1)
[2]

ডকুমেন্টেশন এর কার্যকারিতা উল্লেখ করে বলে মনে হচ্ছে না random.sample। একটি বিশাল তালিকা এবং একটি বিশাল সেট সহ সত্যই তাত্ক্ষণিক পরীক্ষা থেকে, এটি তালিকার জন্য স্থির সময় বলে মনে হচ্ছে তবে সেটটির জন্য নয়। এছাড়াও, একটি সেট উপর পুনরাবৃত্তি এলোমেলো নয়; অর্ডার অপরিজ্ঞাত তবে অনুমানযোগ্য:

>>> list(set(range(10))) == range(10)
True 

যদি এলোমেলোভাবে গুরুত্বপূর্ণ হয় এবং আপনার ধ্রুবক সময় (বড় সেট) এ একগুচ্ছ উপাদানগুলির প্রয়োজন হয় তবে আমি random.sampleপ্রথমে ব্যবহার করে একটি তালিকায় রূপান্তর করব:

>>> lst = list(s) # once, O(len(s))?
...
>>> e = random.sample(lst, 1)[0] # constant time

14
আপনি যদি কেবল একটি উপাদান চান তবে এলোমেলো.চয়েস আরও বুদ্ধিমান।
গ্রেগ লিন্ড

তালিকা (গুলি) .pop () করবে যদি আপনি কোন উপাদানটি গ্রহণ করবেন সেদিকে খেয়াল রাখেন না।
ইভজিনি

8
@ গ্রেগ: আপনি ব্যবহার করতে পারবেন না choice(), কারণ পাইথন আপনার সেটটি সূচী করার চেষ্টা করবে এবং এটি কার্যকর নয়।
কেভিন

3
চতুর অবস্থায়, এটি প্রকৃতপক্ষে ধীরতম সমাধান যা এখনও মাত্রার ক্রম দ্বারা প্রস্তাবিত। হ্যাঁ, এটা যে মন্থর। এমনকি তালিকার প্রথম উপাদানটি বের করার জন্য সেটটিকে তালিকায় রূপান্তর করাও দ্রুত faster আমাদের মধ্যে অবিশ্বাসীদের ( ... হাই! ) জন্য, এই চমত্কার সময়গুলি দেখুন
সিসিল কারি

9

আপাতদৃষ্টিতে সর্বাধিক কমপ্যাক্ট ( symb টি প্রতীক) যদিও একটি সেট উপাদান পাওয়ার খুব ধীর উপায় ( পিইপি 3132 দ্বারা সম্ভব হয়েছে ):

e,*_=s

পাইথন ৩.৫+ এর সাহায্যে আপনি এই 7-প্রতীক প্রকাশটিও ব্যবহার করতে পারেন ( পিইপি 448 এর জন্য ধন্যবাদ ):

[*s][0]

উভয় বিকল্পগুলি লুপের জন্য লুপ পদ্ধতির চেয়ে আমার মেশিনে প্রায় 1000 গুণ ধীর slow


1
লুপের পদ্ধতির জন্য (বা আরও সঠিকভাবে পুনরুক্তি পদ্ধতিতে) ও (1) সময়ের জটিলতা রয়েছে, যখন এই পদ্ধতিগুলি ও (এন) হয়। তারা যদিও সংক্ষিপ্ত । :)
ForeverWintr

6

আমি লিখেছি একটি ইউটিলিটি ফাংশন ব্যবহার। এর নামটি কিছুটা বিভ্রান্তিমূলক কারণ এ জাতীয় বোঝায় এটি এলোমেলো আইটেম বা এর মতো কিছু হতে পারে।

def anyitem(iterable):
    try:
        return iter(iterable).next()
    except StopIteration:
        return None

2
কালি সংরক্ষণ করতে আপনি পরবর্তী (এটির (পুনরাবৃত্ত), কিছুই নয়) সাথে যেতে পারেন :)
1 ''

3

অনুসরণ করছেন পোস্ট, আমি একই ফলাফল পেতে (পাইথন 3.5 এর জন্য)

from timeit import *

stats = ["for i in range(1000): next(iter(s))",
         "for i in range(1000): \n\tfor x in s: \n\t\tbreak",
         "for i in range(1000): s.add(s.pop())"]

for stat in stats:
    t = Timer(stat, setup="s=set(range(100000))")
    try:
        print("Time for %s:\t %f"%(stat, t.timeit(number=1000)))
    except:
        t.print_exc()

আউটপুট:

Time for for i in range(1000): next(iter(s)):    0.205888
Time for for i in range(1000): 
    for x in s: 
        break:                                   0.083397
Time for for i in range(1000): s.add(s.pop()):   0.226570

যাইহোক, অন্তর্নিহিত সেটটি পরিবর্তন করার সময় (যেমন কল করুন remove()) জিনিসগুলি পুনরাবৃত্তিযোগ্য উদাহরণগুলির জন্য খারাপভাবে যায় ( for, iter):

from timeit import *

stats = ["while s:\n\ta = next(iter(s))\n\ts.remove(a)",
         "while s:\n\tfor x in s: break\n\ts.remove(x)",
         "while s:\n\tx=s.pop()\n\ts.add(x)\n\ts.remove(x)"]

for stat in stats:
    t = Timer(stat, setup="s=set(range(100000))")
    try:
        print("Time for %s:\t %f"%(stat, t.timeit(number=1000)))
    except:
        t.print_exc()

ফলাফল স্বরূপ:

Time for while s:
    a = next(iter(s))
    s.remove(a):             2.938494
Time for while s:
    for x in s: break
    s.remove(x):             2.728367
Time for while s:
    x=s.pop()
    s.add(x)
    s.remove(x):             0.030272

1

আমি সাধারণত ছোট সংগ্রহের জন্য যা করি তা হ'ল ধরণের পার্সার / রূপান্তরকারী পদ্ধতি তৈরি করা

def convertSetToList(setName):
return list(setName)

তারপরে আমি নতুন তালিকাটি ব্যবহার করতে এবং সূচী নম্বর দ্বারা অ্যাক্সেস করতে পারি

userFields = convertSetToList(user)
name = request.json[userFields[0]]

একটি তালিকা হিসাবে আপনার সাথে কাজ করার প্রয়োজন হতে পারে এমন অন্যান্য সমস্ত পদ্ধতি থাকবে


কেন কেবল listরূপান্তর পদ্ধতি তৈরির পরিবর্তে ব্যবহার করবেন না?
ড্যারেন টমাস

-1

কীভাবে s.copy().pop()? আমি এটির সময়সই করিনি, তবে এটি কাজ করা উচিত এবং এটি সহজ। এটি ছোট সেটগুলির পক্ষে সেরা কাজ করে, কারণ এটি পুরো সেটটি অনুলিপি করে।


-6

আর একটি বিকল্প হ'ল আপনার অভিধানের মূল্য নেই এমন একটি অভিধান ব্যবহার করা। যেমন,


poor_man_set = {}
poor_man_set[1] = None
poor_man_set[2] = None
poor_man_set[3] = None
...

আপনি কীগুলি সেট হিসাবে বিবেচনা করতে পারেন ব্যতীত সেগুলি কেবল একটি অ্যারে:


keys = poor_man_set.keys()
print "Some key = %s" % keys[0]

এই পছন্দটির একটি পার্শ্ব প্রতিক্রিয়া হ'ল আপনার কোডটি setপাইথনের পুরানো, প্রাক সংস্করণগুলির সাথে পিছনের দিকে সামঞ্জস্য করবে । এটি সম্ভবত সেরা উত্তর না হলেও এটি অন্য বিকল্প।

সম্পাদনা: আপনি অ্যারে বা সেটের পরিবর্তে ডিক ব্যবহার করেছেন এমন সত্যটি লুকিয়ে রাখতে আপনি এমন কিছু করতে পারেন:


poor_man_set = {}
poor_man_set[1] = None
poor_man_set[2] = None
poor_man_set[3] = None
poor_man_set = poor_man_set.keys()

3
এটি আপনার আশা মতো কাজ করে না। পাইথন 2 কী () একটি ও (এন) ক্রিয়াকলাপ, সুতরাং আপনি আর ধ্রুবক সময় নন তবে কমপক্ষে কীগুলি [0] আপনার প্রত্যাশিত মানটি ফিরিয়ে দেবে। অজগর 3 কী () একটি ও (1) ক্রিয়াকলাপ, তাই হ্যাঁ! যাইহোক, এটি আর কোনও তালিকার অবজেক্ট ফেরত দেয় না, এটি এমন একটি সেট-মতো বস্তু দেয় যা সূচী করা যায় না, সুতরাং কীগুলি [0] টাইপআরর ফেলে দেয়। stackoverflow.com/questions/39219065/...
sage88
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.