2015-08-09 15 views
7

यह भरने 'के लिए तो जैसे अजगर में एक सरणी संभव है:अजगर में अद्वितीय वस्तुओं की सूची बनाने

:

> [0] * 10 
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 

मैं जल्दी से समान वस्तुओं की एक सूची बनाने के लिए इस नमूना सिद्धांत का उपयोग करना चाहता था

> a = [{'key': 'value'}] * 3 
> a 
[{'key': 'value'}, {'key': 'value'}, {'key': 'value'}] 

लेकिन ऐसा लगता है इन वस्तुओं एक दूसरे के साथ जुड़े हुए हैं:

> a[0]['key'] = 'another value' 
> a 
[{'key': 'another value'}, {'key': 'another value'}, {'key': 'another value'}] 

यह देखते हुए कि अजगर एक +०१२३१०२२१६ नहीं हैविधि (यह पहली चीज़ थी जिसे मैंने देखा), for लूप घोषित करने और append() को जोड़ने के लिए बिना किसी ऑब्जेक्ट को अद्वितीय ऑब्जेक्ट कैसे बनाएगा?

धन्यवाद!

+2

Fwiw, '' copy.copy() '' समारोह "क्लोन" मौजूदा अजगर वस्तुओं के कई प्रकार के लिए इस्तेमाल किया जा सकता है। इसके अलावा, कई म्यूटेबल ऑब्जेक्ट्स (डेक, सेट, डिकट्स) में '' copy() 'विधि है। सूची वस्तु ने पायथन 3 में 'प्रतिलिपि() 'विधि को बढ़ाया। –

+0

चूंकि प्रश्न बंद था, इसलिए मुझे आपके प्रश्न के दिलचस्प भाग का जवाब देने के लिए एक टिप्पणी का उपयोग करना होगा," आप इसके बिना कैसे कर सकते हैं -लोप और संलग्न करें? " यहां आप क्या कर सकते हैं: 'd = {'key': 'value'}; आयात प्रति; Itertools आयात दोहराना से; ए = सूची (मानचित्र (copy.copy, दोहराना (डी, 10))) ''। जब '' प्रतिलिपि() 'विधि उपलब्ध है, तो यह अभी भी तेजी से * starmap * का उपयोग करने के लिए तेज़ होगा:' ए = सूची (starmap (d.copy, repeat ((), 10)) ''। –

उत्तर

3

एक साधारण सूची समझ चाल करना चाहिए:

>>> a = [{'key': 'value'} for _ in range(3)] 
>>> a 
[{'key': 'value'}, {'key': 'value'}, {'key': 'value'}] 
>>> a[0]['key'] = 'poop' 
>>> a 
[{'key': 'poop'}, {'key': 'value'}, {'key': 'value'}] 
संबंधित मुद्दे