পাইথনে আমি কোনও আকারের খালি অ্যারে কীভাবে পেতে পারি?


120

আমি মূলত সিটিতে এর একটি অজগর সমতুল্য চাই:

int a[x];

তবে অজগরে আমি একটি অ্যারের ঘোষণা করি:

a = []

এবং সমস্যাটি হ'ল আমি এ জাতীয় মান সহ এলোমেলো স্লট বরাদ্দ করতে চাই:

a[4] = 1

তবে অ্যারেটি খালি থাকায় আমি অজগর দিয়ে তা করতে পারি না।

উত্তর:


239

যদি "অ্যারে" দ্বারা আপনি আসলে পাইথন তালিকাটি বোঝায় তবে আপনি ব্যবহার করতে পারেন

a = [0] * 10

অথবা

a = [None] * 10

91
আপনাকে যে জিনিসটি লক্ষ্য রাখতে হবে তা a = [obj] * Nহ'ল অ্যারের প্রতিটি উপাদানগুলিতে একই আপত্তি উপস্থিত হয়। যদি এটি কোনও পরিবর্তনীয় আপত্তি হয় এবং আপনি একটি আইটেম পরিবর্তন করেন তবে সমস্ত পরিবর্তন হয়ে যাবে। ... তবে, উদাহরণস্বরূপ (বা অন্য কোনও অপরিবর্তনীয় টাইপ) ব্যবহার করে, এটি কোনও পার্থক্য করে না। অথবা, আপনি যদি কেবলমাত্র উপাদানগুলিকে বরাদ্দ করেন তবে তা কোনও সমস্যা নয়। (আমি এটি উল্লেখ করেছি কারণ আমি এটি প্রায়শই ঠিক কাজ করেছি :))
দ্যাপাউভিট

4
আমার প্রথম পাইথন প্রকল্পটি, @ ড্যাপাউইট, যা আমাকে কঠিন করে তোলে। এই সতর্কতা মনোযোগ দিন।
নাট

এটি অবজেক্টগুলির জন্য একই রেফারেন্স তৈরি করে
আমর আলা

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)পাইথন ২.x ব্যবহার করতে পারেন । তবে আমি নিশ্চিত নই যে এটি কীভাবে ভুলের সাথে সীমাবদ্ধ। আমি এটিকে পছন্দ করি a = range(N)কারণ প্রতিটি উপাদান একটি বুদ্ধিমান "ডিফল্ট" থেকে শুরু হয়। আমার ধারণা এটি মতামতের বিষয়।
দাপাওয়েট


7

কেবল তালিকাটি ঘোষণা করুন এবং প্রতিটি উপাদান যুক্ত করুন। প্রাক্তন হিসাবে:

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

5
তারপরে আপনি কীভাবে 'এলোমেলো স্লটগুলি বরাদ্দ করবেন'
13-15 এ 13

5

এছাড়াও আপনি তালিকার প্রসারিত পদ্ধতি সহ এটি প্রসারিত করতে পারেন।

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

1

আপনি যদি (বা এই প্রশ্নের অন্যান্য সন্ধানকারী) প্রকৃতপক্ষে পূর্ণসংখ্যার সাথে পূরণ করার জন্য একটি সংঘবদ্ধ অ্যারে তৈরি করতে আগ্রহী হন তবে বাইটারে এবং স্মৃতিচারণ বিবেচনা করুন :

# 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')

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

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.