मुझे अजगर में किसी भी आकार का खाली सरणी कैसे मिलेगा?


120

मैं मूल रूप से सी में इसके बराबर एक अजगर चाहता हूं:

int a[x];

लेकिन अजगर में मैं एक सरणी की घोषणा करता हूं:

a = []

और समस्या यह है कि मैं मानों के साथ यादृच्छिक स्लॉट असाइन करना चाहता हूं जैसे:

a[4] = 1

लेकिन मैं अजगर के साथ ऐसा नहीं कर सकता, क्योंकि सरणी खाली है।

जवाबों:


239

यदि "एरे" द्वारा आप वास्तव में एक पायथन सूची का अर्थ करते हैं, तो आप उपयोग कर सकते हैं

a = [0] * 10

या

a = [None] * 10

91
एक बात जो आपको देखनी है, a = [obj] * Nवह यह है कि सरणी के प्रत्येक तत्व में एक ही obj दिखाई देता है। यदि यह एक परिवर्तनशील obj, और आप एक आइटम को संशोधित करते हैं, तो सभी को बदल दिया जाएगा। ... लेकिन, इस उदाहरण के लिए पूर्णांक (या किसी अन्य अपरिवर्तनीय प्रकार) का उपयोग करके, इससे कोई फर्क नहीं पड़ता। या, यदि आप केवल तत्वों को असाइन करते हैं, तो यह कोई समस्या नहीं है। (मैं इसका उल्लेख करता हूं क्योंकि मैंने ठीक वही किया है जो अब तक अक्सर होता है :))
dappawit

4
वह मेरे बहुत पहले पायथन प्रोजेक्ट, @dappawit पर मुझे मुश्किल करता है। इस चेतावनी को सुनाया।
नैट

यह वस्तुओं के लिए एक ही संदर्भ बनाता है
अमृत ​​अला

22

आप ठीक वही नहीं कर सकते जो आप पाइथन में चाहते हैं (यदि मैं आपको सही तरीके से पढ़ता हूं)। आपको सूची के प्रत्येक तत्व (या जैसा कि आप इसे कहते हैं, सरणी) के लिए मान डालने की आवश्यकता है।

लेकिन, यह प्रयास करें:

a = [0 for x in range(N)]  # N = size of list you want
a[i] = 5  # as long as i < N, you're okay

अन्य प्रकारों की सूचियों के लिए, 0. के अलावा कुछ का उपयोग करें Noneअक्सर एक अच्छा विकल्प होता है।


2
यह उत्तर गलत पर सीमा करता है। range(N)पहले से ही एक सूची का उत्पादन होगा अगर पायथन <3.0।
अपाला

1
सच है, यह एक सूची का उत्पादन करेगा। यदि आप दक्षता के बारे में चिंतित हैं, तो आप xrange(N)पायथन 2.x में उपयोग कर सकते हैं । मुझे यकीन नहीं है कि यह गलत पर सीमा कैसे है, हालांकि। मैं इसे पसंद करता हूं a = range(N)क्योंकि प्रत्येक तत्व एक समझदार "डिफ़ॉल्ट" पर शुरू होता है। मुझे लगता है कि यह राय का विषय है।
dappawit 21


7

बस सूची घोषित करें और प्रत्येक तत्व को जोड़ें। पूर्व के लिए:

a = []
a.append('first item')
a.append('second item')

5
फिर आप 'रैंडम स्लॉट्स कैसे असाइन करेंगे'
Tdelang

5

इसके अलावा आप सूची की विस्तार विधि के साथ विस्तार कर सकते हैं।

a= []
a.extend([None]*10)
a.extend([None]*20)

1

आप (या इस सवाल के अन्य खोजकर्ताओं) वास्तव में पूर्णांकों के साथ भरने के लिए एक सन्निहित सरणी बनाने में रुचि रखते थे, तो यह विचार bytearray और memoryivew :

# cast() is available starting Python 3.3
size = 10**6 
ints = memoryview(bytearray(size)).cast('i') 

ints.contiguous, ints.itemsize, ints.shape
# (True, 4, (250000,))

ints[0]
# 0

ints[0] = 16
ints[0]
# 16

1
x=[]
for i in range(0,5):
    x.append(i)
    print(x[i])

2
हालांकि यह कोड प्रश्न को हल कर सकता है, जिसमें यह भी बताया गया है कि यह समस्या कैसे और क्यों हल करती है, इससे वास्तव में आपके पोस्ट की गुणवत्ता को बेहतर बनाने में मदद मिलेगी, और संभवत: अधिक वोट मिले। याद रखें कि आप भविष्य में पाठकों के लिए सवाल का जवाब दे रहे हैं, न कि केवल उस व्यक्ति से जो अब पूछ रहा है। कृपया स्पष्टीकरण जोड़ने के लिए अपने उत्तर को संपादित करें और संकेत दें कि क्या सीमाएँ और मान्यताएँ लागू होती हैं।
डेनियल

0

यदि आप वास्तव में सी-स्टाइल सरणी चाहते हैं

import array
a = array.array('i', x * [0])
a[3] = 5
try:
   [5] = 'a'
except TypeError:
   print('integers only allowed')

ध्यान दें कि अजगर में संयुक्त राष्ट्र के आरंभिक चर की कोई अवधारणा नहीं है । एक चर एक ऐसा नाम है जो एक मूल्य से जुड़ा होता है, इसलिए उस मूल्य में कुछ होना चाहिए। सरणी के ऊपर के उदाहरण में शून्य के साथ आरंभीकृत किया गया है।

हालांकि, यह अजगर में असामान्य है, जब तक कि आपको वास्तव में निम्न-स्तरीय सामान की आवश्यकता न हो। ज्यादातर मामलों में, आप एक खाली सूची या खाली संख्यात्मक सरणी का उपयोग करके बेहतर-बंद होते हैं, जैसा कि अन्य उत्तर बताते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.