मैं पायथन में एक सरणी की घोषणा कैसे करूं ?
मुझे दस्तावेज़ में सरणियों का कोई संदर्भ नहीं मिल रहा है।
__getitem__
O (1) नहीं होगा।
मैं पायथन में एक सरणी की घोषणा कैसे करूं ?
मुझे दस्तावेज़ में सरणियों का कोई संदर्भ नहीं मिल रहा है।
__getitem__
O (1) नहीं होगा।
जवाबों:
variable = []
अब variable
एक खाली सूची * का संदर्भ देता है ।
बेशक यह एक घोषणा है, घोषणा नहीं। पायथन में कहने का कोई तरीका नहीं है "इस चर को किसी सूची के अलावा किसी भी चीज़ का उल्लेख नहीं करना चाहिए", क्योंकि पायथन गतिशील रूप से टाइप किया गया है।
* डिफ़ॉल्ट अंतर्निहित पायथन प्रकार को एक सूची कहा जाता है , न कि एक सरणी। यह मनमाना लंबाई का एक ऑर्डर किया गया कंटेनर है जो वस्तुओं के विषम संग्रह को पकड़ सकता है (उनके प्रकार मायने नहीं रखते हैं और स्वतंत्र रूप से मिश्रित हो सकते हैं)। यह array
मॉड्यूल के साथ भ्रमित नहीं होना चाहिए , जो सी array
प्रकार के करीब एक प्रकार प्रदान करता है ; सामग्री समरूप (सभी प्रकार की) होनी चाहिए, लेकिन लंबाई अभी भी गतिशील है।
variable = ["Hi", "Hello"];
?)
my_2x2_list = [[a, b], [c, d]]
:। इसके लिए आपको बहु-आयामी सरणियों की आवश्यकता होती है, इस पर निर्भर करते हुए, आप उपयोग करने पर भी विचार कर सकते हैं numpy
, जो बहु-आयामी, सजातीय, अनबॉक्स किए गए सरणियों के लिए सरणी प्रकार को परिभाषित करता है जो कि जहां लागू हो वहां बहुत अधिक कुशल हो सकते हैं, इसलिए वे संख्यात्मक अभिकलन के लिए बेहतर हैं।
यह पाइथन में आश्चर्यजनक रूप से जटिल विषय है।
एरे को कक्षा द्वारा दर्शाया जाता है list
( संदर्भ देखें और उन्हें जनरेटर के साथ न मिलाएं )।
उपयोग के उदाहरण देखें:
# empty array
arr = []
# init with values (can contain mixed types)
arr = [1, "eels"]
# get item by index (can be negative to access end of array)
arr = [1, 2, 3, 4, 5, 6]
arr[0] # 1
arr[-1] # 6
# get length
length = len(arr)
# supports append and insert
arr.append(8)
arr.insert(6, 7)
हुड पायथन के तहत list
एक वास्तविक सरणी के लिए एक आवरण है जिसमें आइटम के संदर्भ शामिल हैं। इसके अलावा, अंतर्निहित सरणी कुछ अतिरिक्त स्थान के साथ बनाई गई है।
इस के परिणाम हैं:
arr[6653]
उसी के समान है arr[0]
)append
ऑपरेशन कुछ अतिरिक्त जगह पर 'मुफ्त में' होता हैinsert
ऑपरेशन महंगा हैसंचालन जटिलता की इस भयानक तालिका की जाँच करें ।
इसके अलावा, कृपया इस चित्र को देखें, जहाँ मैंने सरणी, संदर्भों और लिंक की गई सूची के बीच सबसे महत्वपूर्ण अंतर दिखाने की कोशिश की है:
[1, 2, 3, 4, 5, 6, 7, 8, 9][1:-2]
परिणाम के लिए होगा[2, 3, 4, 5, 6, 7]
a == b[:2]
रिटर्न यह सच है, तो के पहले 2 तत्वों ख सरणी के मूल्यों के बराबर होती है एक
आप वास्तव में चीजों की घोषणा नहीं करते हैं, लेकिन यह है कि आप पायथन में एक सरणी कैसे बनाते हैं:
from array import array
intarray = array('i')
अधिक जानकारी के लिए सरणी मॉड्यूल देखें: http://docs.python.org/library/array.html
अब संभव है कि आप एक सरणी नहीं चाहते हैं, लेकिन एक सूची है, लेकिन दूसरों ने जवाब दिया है कि पहले से ही। :)
list
। पायथन में एक विशेष-उद्देश्य डेटा प्रकार होता है जिसे array
C सरणी की तरह कहा जाता है और इसका बहुत कम उपयोग किया जाता है।
मुझे लगता है कि आप (मतलब) पहले से भरी 30 कोशिकाओं के साथ एक सूची चाहते हैं। इसलिए
f = []
for i in range(30):
f.append(0)
एक उदाहरण जहां इसका उपयोग किया जा सकता है, वह फिबोनाची अनुक्रम में है। प्रॉजेक्ट 2 को प्रोजेक्ट यूलर में देखें
f = [0] * 30
इसके बजाय कोशिश करें ।
इस तरह से:
my_array = [1, 'rebecca', 'allard', 15]
गणना के लिए, इस तरह से सुन्न सरणियों का उपयोग करें:
import numpy as np
a = np.ones((3,2)) # a 2D array with 3 rows, 2 columns, filled with ones
b = np.array([1,2,3]) # a 1D array initialised using a list [1,2,3]
c = np.linspace(2,3,100) # an array with 100 points beteen (and including) 2 and 3
print(a*1.5) # all elements of a times 1.5
print(a.T+b) # b added to the transpose of a
इन खस्ता सरणियों को डिस्क से (यहां तक कि संपीड़ित) से बचाया और लोड किया जा सकता है और बड़ी मात्रा में तत्वों के साथ जटिल गणना सी-जैसे तेज हैं।
वैज्ञानिक वातावरण में ज्यादा इस्तेमाल किया जाता है। अधिक के लिए यहाँ देखें ।
JohnMachin की टिप्पणी का वास्तविक उत्तर होना चाहिए। अन्य सभी उत्तर मेरी राय में सिर्फ कामचोर हैं! इसलिए:
array=[0]*element_count
x=[[0] * 10] * 10
कुछ योगदानों ने सुझाव दिया कि अजगर में सरणियों को सूचियों द्वारा दर्शाया जाता है। यह गलत है। पायथन में array()
मानक पुस्तकालय मॉड्यूल का स्वतंत्र कार्यान्वयन है array
" array.array()
" इसलिए दोनों को भ्रमित करना गलत है। अजगर में सूचियां सूचीबद्ध हैं इसलिए उपयोग किए गए नामकरण के साथ सावधान रहें।
list_01 = [4, 6.2, 7-2j, 'flo', 'cro']
list_01
Out[85]: [4, 6.2, (7-2j), 'flo', 'cro']
सूची और के बीच एक बहुत महत्वपूर्ण अंतर है array.array()
। जबकि इन दोनों वस्तुओं को क्रमबद्ध किया जाता है, array.array () एक क्रमबद्ध सजातीय क्रम है जबकि एक सूची एक गैर-सजातीय अनुक्रम है।
आप पायथन में कुछ भी घोषित नहीं करते हैं। आप बस इसका इस्तेमाल करें। मेरा सुझाव है कि आप http://diveintopython.net जैसी किसी चीज़ से शुरुआत करें ।
मैं आम तौर पर सिर्फ वही करूंगा a = [1,2,3]
जो वास्तव में इस औपचारिक परिभाषा को देखने के list
लिए हैarrays
Lennart के उत्तर में जोड़ने के लिए, इस तरह एक सरणी बनाई जा सकती है:
from array import array
float_array = array("f",values)
जहाँ मान टपल, सूची या np.array का रूप ले सकता है, लेकिन सरणी नहीं:
values = [1,2,3]
values = (1,2,3)
values = np.array([1,2,3],'f')
# 'i' will work here too, but if array is 'i' then values have to be int
wrong_values = array('f',[1,2,3])
# TypeError: 'array.array' object is not callable
और आउटपुट अभी भी समान होगा:
print(float_array)
print(float_array[1])
print(isinstance(float_array[1],float))
# array('f', [1.0, 2.0, 3.0])
# 2.0
# True
सूची की अधिकांश विधियाँ सरणी के साथ-साथ, आम लोगों के पॉप (), विस्तार (), और परिशिष्ट () के साथ काम करती हैं।
उत्तरों और टिप्पणियों को देखते हुए, ऐसा प्रतीत होता है कि सरणी डेटा संरचना इतनी लोकप्रिय नहीं है। हालांकि मुझे यह पसंद है, उसी तरह जैसे कोई सूची में टपल पसंद कर सकता है।
सरणी संरचना में सूची या np.array की तुलना में कठोर नियम हैं, और यह त्रुटियों को कम कर सकता है और डिबगिंग को आसान बना सकता है, खासकर जब संख्यात्मक डेटा के साथ काम कर रहा हो।
एक फ्लोट को एक इंट्रस्ट में डालने / जोड़ने का प्रयास एक TypeError को फेंक देगा:
values = [1,2,3]
int_array = array("i",values)
int_array.append(float(1))
# or int_array.extend([float(1)])
# TypeError: integer argument expected, got float
मानों को रखने के लिए जो सरणी रूप में पूर्णांक (उदाहरण के लिए सूचियों की सूची) के लिए होते हैं, इसलिए "टाइप टाइप: सूची सूचकांकों को पूर्णांक नहीं, फ्लोट होना चाहिए" को रोका जा सकता है, क्योंकि सरणियों को np.array और सूचियों के समान पुनरावृत्त किया जा सकता है:
int_array = array('i',[1,2,3])
data = [11,22,33,44,55]
sample = []
for i in int_array:
sample.append(data[i])
वार्षिक रूप से, एक फ़्लोट एरे में एक इंट्रोड्यूस करने से इंट्रूमेंट फ़्लोट बन जाएगा, बिना किसी अपवाद के।
np.array अपनी प्रविष्टियों के लिए भी उसी डेटा प्रकार को बनाए रखता है, लेकिन एक त्रुटि देने के बजाय यह नई प्रविष्टियों (आमतौर पर डबल या स्ट्रेट) में फिट होने के लिए अपने डेटा प्रकार को बदल देगा:
import numpy as np
numpy_int_array = np.array([1,2,3],'i')
for i in numpy_int_array:
print(type(i))
# <class 'numpy.int32'>
numpy_int_array_2 = np.append(numpy_int_array,int(1))
# still <class 'numpy.int32'>
numpy_float_array = np.append(numpy_int_array,float(1))
# <class 'numpy.float64'> for all values
numpy_str_array = np.append(numpy_int_array,"1")
# <class 'numpy.str_'> for all values
data = [11,22,33,44,55]
sample = []
for i in numpy_int_array_2:
sample.append(data[i])
# no problem here, but TypeError for the other two
यह असाइनमेंट के दौरान भी सच है। यदि डेटा प्रकार निर्दिष्ट किया गया है, तो np.array, जहाँ भी संभव होगा, प्रविष्टियों को उस डेटा प्रकार में बदल देगा:
int_numpy_array = np.array([1,2,float(3)],'i')
# 3 becomes an int
int_numpy_array_2 = np.array([1,2,3.9],'i')
# 3.9 gets truncated to 3 (same as int(3.9))
invalid_array = np.array([1,2,"string"],'i')
# ValueError: invalid literal for int() with base 10: 'string'
# Same error as int('string')
str_numpy_array = np.array([1,2,3],'str')
print(str_numpy_array)
print([type(i) for i in str_numpy_array])
# ['1' '2' '3']
# <class 'numpy.str_'>
या, संक्षेप में:
data = [1.2,3.4,5.6]
list_1 = np.array(data,'i').tolist()
list_2 = [int(i) for i in data]
print(list_1 == list_2)
# True
जबकि सरणी बस दे देंगे:
invalid_array = array([1,2,3.9],'i')
# TypeError: integer argument expected, got float
इस वजह से, प्रकार-विशिष्ट आदेशों के लिए np.array का उपयोग करना एक अच्छा विचार नहीं है। सरणी संरचना यहाँ उपयोगी है। सूची मानों के डेटा प्रकार को संरक्षित करती है।
और कुछ के लिए मैं बल्कि pesky पाते हैं: डेटा प्रकार सरणी () में पहले तर्क के रूप में निर्दिष्ट किया गया है, लेकिन (आमतौर पर) np.array () में दूसरा। : |
C का संबंध यहाँ बताया गया है: पायथन सूची बनाम ऐरे - कब उपयोग करना है?
मजा आ गया!
नोट: टाइप और बल्कि सख्त प्रकृति की प्रकृति पायथन के बजाय सी की ओर अधिक झुकती है, और डिजाइन द्वारा पायथन के पास अपने कार्यों में कई प्रकार-विशिष्ट बाधाएं नहीं हैं। इसकी अलोकप्रियता सहयोगात्मक कार्यों में एक सकारात्मक प्रतिक्रिया भी पैदा करती है, और इसकी जगह ज्यादातर फ़ाइल में x के लिए एक अतिरिक्त [int (x)] शामिल है। इसलिए यह सरणी के अस्तित्व को अनदेखा करने के लिए पूरी तरह से व्यवहार्य और उचित है। यह हम में से अधिकांश को किसी भी तरह से बाधित नहीं करना चाहिए। : डी
अजगर उन्हें सूचियों कहता है । आप वर्ग कोष्ठक और अल्पविराम के साथ एक सूची शाब्दिक लिख सकते हैं:
>>> [6,28,496,8128]
[6, 28, 496, 8128]
मेरे पास स्ट्रिंग्स की एक सरणी थी और ट्रू के लिए शुरू की गई बूलियन की समान लंबाई के एक सरणी की आवश्यकता थी। यह जो मैंने किया है
strs = ["Hi","Bye"]
bools = [ True for s in strs ]
int count[26]={0};
शायद एक बेहतर तरीका है लेकिन bools
ऊपर से काम करने वाले इस संस्करण ने count=[0 for ii in range(26)]
बाद में, मैंने इसे बदल दिया, count=[0]*26
जो बेहतर लगता है।
आप सूचियाँ बना सकते हैं और उन्हें सरणियों में परिवर्तित कर सकते हैं या आप संख्यात्मक मॉड्यूल का उपयोग करके सरणी बना सकते हैं। नीचे कुछ उदाहरण दिए गए हैं। Numpy भी बहुआयामी सरणियों के साथ काम करना आसान बनाता है।
import numpy as np
a = np.array([1, 2, 3, 4])
#For custom inputs
a = np.array([int(x) for x in input().split()])
आप इस सरणी को 2X2 मैट्रिक्स में भी फेरबदल कर सकते हैं, जो कि रिशेप फ़ंक्शन का उपयोग करके मैट्रिक्स के आयामों के रूप में इनपुट में लेता है।
mat = a.reshape(2, 2)