python - [] और{} बनाम सूची() और dict(), जो बेहतर है?




performance list (7)

मैं समझता हूं कि वे दोनों अनिवार्य रूप से एक ही चीज हैं, लेकिन शैली के संदर्भ में, एक खाली सूची या निर्देश बनाने के लिए उपयोग करने के लिए कौन सा बेहतर (अधिक पायथनिक) है?


[] और {} बेहतर हैं

सूची () स्वाभाविक रूप से धीमी है [] और dict () स्वाभाविक रूप से धीमी है {},

इसलिये

  1. प्रतीक लुकअप है (यदि आपने कुछ और होने के लिए सूची को फिर से परिभाषित नहीं किया है तो पाइथन को पहले से ही पता होना चाहिए!),

  2. समारोह आमंत्रण है,

  3. फिर इसे जांचना होगा कि क्या पुनरावर्तनीय तर्क पारित किया गया था (इसलिए यह इसके तत्वों के साथ सूची बना सकता है)

ज्यादातर मामलों में गति अंतर हालांकि कोई व्यावहारिक अंतर नहीं करेगा।

( source )


[] और सूची () के बीच अंतर के मामले में, एक गड़बड़ी है जिसे मैंने किसी और को नहीं देखा है। यदि आप सूची के सदस्य के रूप में एक शब्दकोश का उपयोग करते हैं, तो दोनों पूरी तरह अलग परिणाम देंगे:

In [1]: foo_dict = {"1":"foo", "2":"bar"}

In [2]: [foo_dict]
Out [2]: [{'1': 'foo', '2': 'bar'}]

In [3]: list(foo_dict)
Out [3]: ['1', '2'] 

गति के मामले में, यह खाली सूचियों / डिक्ट्स के लिए कोई प्रतिस्पर्धा नहीं है:

>>> from timeit import timeit
>>> timeit("[]")
0.040084982867934334
>>> timeit("list()")
0.17704233359267718
>>> timeit("{}")
0.033620194745424214
>>> timeit("dict()")
0.1821558326547077

और खाली के लिए:

>>> timeit("[1,2,3]")
0.24316302770330367
>>> timeit("list((1,2,3))")
0.44744206316727286
>>> timeit("list(foo)", setup="foo=(1,2,3)")
0.446036018543964
>>> timeit("{'a':1, 'b':2, 'c':3}")
0.20868602015059423
>>> timeit("dict(a=1, b=2, c=3)")
0.47635635255323905
>>> timeit("dict(bar)", setup="bar=[('a', 1), ('b', 2), ('c', 3)]")
0.9028228448029267

साथ ही, ब्रैकेट नोटेशन का उपयोग करके आप सूची और शब्दकोश समझ का उपयोग करते हैं, जो कि पर्याप्त कारण हो सकता है।


जैसा कि पाइथन स्टाइल गाइड में इसका उल्लेख नहीं है, आप जो भी शैली चाहते हैं उसका उपयोग कर सकते हैं, यह व्यक्तिगत स्वाद का मामला है।


नीचे दिखाए गए उदाहरण के रूप में [] और सूची () के बीच व्यवहार में एक अंतर है। हमें सूची () का उपयोग करने की आवश्यकता है यदि हम वापस संख्याओं की सूची चाहते हैं, अन्यथा हमें नक्शा वस्तु मिलती है! हालांकि यह सुनिश्चित नहीं है कि इसे कैसे समझाया जाए।

sth = [(1,2), (3,4),(5,6)]
sth2 = map(lambda x: x[1], sth) 
print(sth2) # print returns object <map object at 0x000001AB34C1D9B0>

sth2 = [map(lambda x: x[1], sth)]
print(sth2) # print returns object <map object at 0x000001AB34C1D9B0>
type(sth2) # list 
type(sth2[0]) # map

sth2 = list(map(lambda x: x[1], sth))
print(sth2) #[2, 4, 6]
type(sth2) # list
type(sth2[0]) # int

मेरी राय में [] और {} रिक्त सूचियों / डिक्ट्स बनाने के लिए सबसे अधिक पाइथोनिक और पठनीय तरीके हैं।

set() बारे में सावधान रहें, उदाहरण के लिए:

this_set = {5}
some_other_set = {}

भ्रमित हो सकता है। पहला एक तत्व के साथ एक सेट बनाता है, दूसरा एक खाली dict बनाता है, एक सेट नहीं


समय सारिणी सटीक समय नहीं लगती है। उपरोक्त वर्णित समयबद्ध बेंचमार्क के अनुसार (), ऐसा लगता है कि ~ 200ms लगता है जो सामान्य http कॉल से धीमा है। खोल, dict () और फिर समय ("dict ()") में चलने का प्रयास करें, आप निष्पादन में दृश्य अंतर देखेंगे; टाइमिट ("dict ()") अधिक समय लेता है। कोड के टुकड़े के बाद पेस्ट कॉपी करें और खोल में चलाएं, आपको {} और dict () दोनों में बहुत अंतर दिखाई नहीं देगा।

    from datetime import datetime
    then = datetime.now()
    a = dict()
    now = datetime.now()
    print then
    print now

    then = datetime.now()
    b = {}
    now = datetime.now()
    print then
    print now




dictionary