নির্দিষ্ট আকারের সাথে পাইথনে খালি তালিকা তৈরি করুন


545

আমি একটি খালি তালিকা তৈরি করতে চাই (বা সর্বোত্তম উপায় যা হ'ল) ​​যা 10 টি উপাদান রাখতে পারে।

এর পরে আমি সেই তালিকায় মানগুলি নির্ধারণ করতে চাই, উদাহরণস্বরূপ এটি 0 থেকে 9 প্রদর্শন করার কথা:

s1 = list();
for i in range(0,9):
   s1[i] = i

print  s1

তবে আমি যখন এই কোডটি চালাই, এটি একটি ত্রুটি উত্পন্ন করে বা অন্য কোনও ক্ষেত্রে এটি কেবল প্রদর্শিত [](খালি)।

কেউ ব্যাখ্যা করতে পারেন কেন?



7
সংজ্ঞা অনুসারে একটি "খালি তালিকা" ( []) এর শূন্য উপাদান রয়েছে। আপনি কি দৃশ্যত চান মত falsy মান একটি তালিকা রয়েছে None, 0বা, ''
dan04

থেকে একটি তালিকা তৈরী করতে 0করতে 9আপনি আসলে ব্যবহার করা উচিত for i in range(0, 10)যা মানে, for (int i = 0, i < 10, i++)
অ্যাটকোল্ড

উত্তর:


830

lst[i] = somethingতালিকাটি ইতিমধ্যে কমপক্ষে i+1উপাদানগুলির সাথে আরম্ভ করা না হলে আপনি যেমন একটি তালিকাতে বরাদ্দ করতে পারবেন না । তালিকার শেষে উপাদান যুক্ত করতে আপনাকে অ্যাপেন্ড ব্যবহার করতে হবে। lst.append(something)

(আপনি যদি অভিধান ব্যবহার করে থাকেন তবে আপনি অ্যাসাইনমেন্ট নোটেশনটি ব্যবহার করতে পারেন)।

একটি খালি তালিকা তৈরি করা হচ্ছে:

>>> l = [None] * 10
>>> l
[None, None, None, None, None, None, None, None, None, None]

উপরের তালিকার একটি বিদ্যমান উপাদানকে একটি মান নির্ধারণ করা:

>>> l[1] = 5
>>> l
[None, 5, None, None, None, None, None, None, None, None]

l[15] = 5আমাদের তালিকায় কেবল 10 টি উপাদান রয়েছে বলে মনে রাখবেন something

পরিসর (এক্স) [0, 1, 2, ... x-1] থেকে একটি তালিকা তৈরি করে

# 2.X only. Use list(range(10)) in 3.X.
>>> l = range(10)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

একটি তালিকা তৈরি করতে একটি ফাংশন ব্যবহার করে:

>>> def display():
...     s1 = []
...     for i in range(9): # This is just to tell you how to create a list.
...         s1.append(i)
...     return s1
... 
>>> print display()
[0, 1, 2, 3, 4, 5, 6, 7, 8]

তালিকা বোধগম্য (স্কোয়ারগুলি ব্যবহার করা কারণ পরিসরের জন্য আপনাকে এগুলি করার দরকার নেই, আপনি কেবল ফিরে আসতে পারেন range(0,9)):

>>> def display():
...     return [x**2 for x in range(9)]
... 
>>> print display()
[0, 1, 4, 9, 16, 25, 36, 49, 64]

17
"আপনি lst [i] = কিছু" এর মতো কোনও তালিকা বরাদ্দ করতে পারবেন না - এর অর্থ কী? আপনি যা করতে পারবেন না তা হ'ল বর্তমান তালিকা দৈর্ঘ্যের বাইরে অস্তিত্বের উপাদানকে অর্পণ করা
সের্গেই

5
"যদি না ইতিমধ্যে তালিকাটি কমপক্ষে i + 1 উপাদান দিয়ে শুরু করা হয়" ....
মিঃআরআর

5
আপনি এটি করতে পারেন:a = [0 for _ in range(10)]
কামার

তালিকা () ফাংশন ব্যবহার করে এটি করা কি সম্ভব?
রাউল চিয়েরেলা

125

পরিবর্তে এটি চেষ্টা করুন:

lst = [None] * 10

উপরেরটি 10 ​​মাপের একটি তালিকা তৈরি করবে, যেখানে প্রতিটি পজিশনে প্রাথমিক করা হয় None। এর পরে, আপনি এতে উপাদান যুক্ত করতে পারেন:

lst = [None] * 10
for i in range(10):
    lst[i] = i

স্বীকার করা, এটি জিনিসগুলি করার জন্য পাইথোনিক উপায় নয়। এটি করা ভাল:

lst = []
for i in range(10):
    lst.append(i)

বা এমনকি সহজ , পাইথন ২.x এ আপনি 0 থেকে 9 এর মান সহ একটি তালিকা শুরু করতে এটি করতে পারেন:

lst = range(10)

এবং পাইথন 3.x এ:

lst = list(range(10))

2
এ সম্পর্কে অন্যান্য দুর্দান্ত জিনিসটি হ'ল আপনি ডিফল্ট মান সহ একটি তালিকা শুরু করতে পারেন। lst = [''] * 10বাlst = [0] * 10
অ্যান্টনি ম্যানিং-ফ্র্যাঙ্কলিন

2
বোধগম্য উদাহরণের উপর একটি বৈকল্পিক। অ্যারে প্রয়োজন সব উপাদান আরম্ভের সময়ে খালি মনে করে থাকেন, ব্যবহার করুন: arr = [None for _ in range(10)]
ডগ আর

85

varunl বর্তমানে গৃহীত উত্তর

 >>> l = [None] * 10
 >>> l
 [None, None, None, None, None, None, None, None, None, None]

সংখ্যার মতো অ-রেফারেন্স ধরণের জন্য ভাল কাজ করে। দুর্ভাগ্যক্রমে আপনি যদি তালিকার একটি তালিকা তৈরি করতে চান তবে আপনি রেফারিং ত্রুটিতে চলে যাবেন। পাইথন ২.7. in এর উদাহরণ:

>>> a = [[]]*10
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
>>> 

আপনি দেখতে পাচ্ছেন, প্রতিটি উপাদান একই তালিকার অবজেক্টের দিকে নির্দেশ করছে। এটি পেতে, আপনি এমন একটি পদ্ধতি তৈরি করতে পারেন যা প্রতিটি অবস্থানকে আলাদা অবজেক্ট রেফারেন্সে সূচনা করে।

def init_list_of_objects(size):
    list_of_objects = list()
    for i in range(0,size):
        list_of_objects.append( list() ) #different object reference each time
    return list_of_objects


>>> a = init_list_of_objects(10)
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [], [], [], [], [], [], [], [], []]
>>> 

এটি করার একটি ডিফল্ট, অন্তর্নির্মিত পাইথন পদ্ধতি সম্ভবত রয়েছে (কোনও ফাংশন লেখার পরিবর্তে) তবে আমি এটি নিশ্চিত কি না। সংশোধন করে খুশি হবে!

সম্পাদনা: এটি [ [] for _ in range(10)]

উদাহরণ:

>>> [ [random.random() for _ in range(2) ] for _ in range(5)]
>>> [[0.7528051908943816, 0.4325669600055032], [0.510983236521753, 0.7789949902294716], [0.09475179523690558, 0.30216475640534635], [0.3996890132468158, 0.6374322093017013], [0.3374204010027543, 0.4514925173253973]]

19
আমি শুনেছি appendখুব ঘন ঘন ব্যবহার বোঝা তালিকার চেয়ে নিকৃষ্ট হয়। আপনি এর মাধ্যমে আপনার তালিকার তালিকা তৈরি করতে পারেন [ [] for _ in range(10)]
এম হারজক্যাম্প 4'16

10
উত্সাহিত হওয়ায় আমি পাগল হয়ে যাচ্ছিলাম কারণ একই তথ্যটি নিয়ে বহুবার আমার পুনরাবৃত্তি হয়েছিল এবং শেষ পর্যন্ত এই উত্তরটি সন্ধান করার আগে কী ঘটছিল তা অনুভব করতে পারছিলাম না ^^ কেন এখানে এত কম তা আমি বুঝতে পারি না low
ব্রেগাল্যাড

19

আপনি করতে পারেন .append(element)তালিকা, উদাঃ করার জন্য: s1.append(i)। আপনি বর্তমানে যা করার চেষ্টা করছেন তা হ'ল একটি উপাদান ( s1[i]) অ্যাক্সেস করা যা অস্তিত্বহীন।


16

দুটি "দ্রুত" পদ্ধতি রয়েছে:

x = length_of_your_list
a = [None]*x
# or
a = [None for _ in xrange(x)]

এটি [None]*xদ্রুত যা প্রদর্শিত হয়:

>>> from timeit import timeit
>>> timeit("[None]*100",number=10000)
0.023542165756225586
>>> timeit("[None for _ in xrange(100)]",number=10000)
0.07616496086120605

তবে আপনি যদি কোনও পরিসীমা (যেমন [0,1,2,3,...,x-1]) দিয়ে ঠিক থাকেন তবে range(x)দ্রুততম হতে পারে:

>>> timeit("range(100)",number=10000)
0.012513160705566406

দ্রষ্টব্য যে পাইথন 3 এ আপনাকে list(range(n))পরিবর্তে ব্যবহার করতে হবে, কারণ range()কোনও তালিকা প্রত্যাবর্তন করে না তবে এটি পুনরাবৃত্তিকারী এবং এটি এর চেয়ে দ্রুত নয় [None] * n
স্কিলমন টপংসওয়ার্স.অক্সিজ

10

আমি অবাক হই কেউই খালি তালিকার একটি তালিকা তৈরি করার জন্য এই সহজ পদ্ধতির পরামর্শ দেয় না। এটি একটি পুরানো থ্রেড, তবে কেবলমাত্র সম্পূর্ণতার জন্য এটি যুক্ত করা। এটি 10 ​​টি খালি তালিকার একটি তালিকা তৈরি করবে

x = [[] for i in range(10)]

7
উপরের বনাম করণের মধ্যে সর্বাধিক গুরুত্বপূর্ণ পার্থক্যটি x = [[]] * 10হ'ল পরবর্তী সময়ে তালিকার প্রতিটি উপাদান একই তালিকা অবজেক্টের দিকে নির্দেশ করছে । সুতরাং আপনি কেবল একই বস্তুর 10 অনুলিপি না চাইলে rangeবেসড ভেরিয়েন্টটি ব্যবহার করুন এটি 10 ​​টি নতুন অবজেক্ট তৈরি করে। আমি এই পার্থক্যটি খুব গুরুত্বপূর্ণ বলে মনে করেছি।
মনদীপ সন্ধু

6

(এটি প্রশ্নের মূল সংস্করণের ভিত্তিতে লেখা হয়েছিল।)

আমি একটি খালি তালিকা তৈরি করতে চাই (বা সর্বোত্তম উপায় যা হ'ল) ​​10 টি উপাদান রাখতে পারে।

সমস্ত তালিকাগুলি আপনার পছন্দ মতো অনেকগুলি উপাদান ধরে রাখতে পারে, কেবলমাত্র উপলব্ধ মেমরির সীমাবদ্ধ। তালিকার একমাত্র "আকার" এটি বর্তমানে বিদ্যমান উপাদানগুলির সংখ্যা ।

তবে আমি যখন এটি চালাব, ফলাফলটি []

print display s1বৈধ সিনট্যাক্স নয়; আপনি যা দেখছেন তার বর্ণনার উপর ভিত্তি করে, আমি ধরে নিই যে আপনি বোঝাতে চেয়েছিলেন display(s1)এবং তারপরে print s1। এটি চালানোর জন্য, আপনাকে অবশ্যই পূর্বে s1ফাংশনে প্রবেশের জন্য একটি গ্লোবাল সংজ্ঞায়িত করতে হবে।

কলিং displayলিখিত হিসাবে আপনার পাস করা তালিকার পরিবর্তন করে না। আপনার কোডটি বলে যে " s1যে কোনও জিনিস ফাংশনে প্রেরণ করা হয়েছিল তার একটি নাম; ঠিক আছে, এখন আমরা প্রথমে যে জিনিসটি করব তা সম্পূর্ণরূপে ভুলে যাওয়া উচিত এবং s1পরিবর্তে একটি নতুন তৈরির জন্য উল্লেখ করা শুরু করা উচিত listNow এখন আমরা এটি পরিবর্তন করব list"। আপনি যে মানটি পাস করেছেন তাতে এটির কোনও প্রভাব নেই।

এখানে কোনও মান পাস করার কোনও কারণ নেই। (কোনও ফাংশন তৈরির আসল কারণ নেই, তবে এটি পয়েন্টের পাশে।) আপনি কিছু "তৈরি" করতে চান, এটি আপনার ফাংশনের আউটপুট। আপনার বর্ণিত জিনিসটি তৈরি করতে কোনও তথ্যের প্রয়োজন নেই, সুতরাং কোনও তথ্য পাস করবেন না information তথ্য বের করার জন্য returnএটি।

এটি আপনাকে এমন কিছু দেবে:

def display():
    s1 = list();
    for i in range(0, 9):
        s1[i] = i
    return s1

পরবর্তী সমস্যাটি আপনি লক্ষ্য করবেন যে আপনার তালিকায় আসলে কেবল 9 টি উপাদান থাকবে কারণ শেষ বিন্দুটি rangeফাংশনটি এড়িয়ে যায় । (পার্শ্ব নোটস []যেমন ঠিক তেমনি কাজ করে list(), সেমিকোলন অপ্রয়োজনীয়, s1ভেরিয়েবলের একটি খারাপ নাম, এবং rangeআপনি যদি থেকে শুরু করেন তবে কেবল একটি প্যারামিটার প্রয়োজন 0)) সুতরাং আপনার সাথে শেষ পর্যন্ত

def create_list():
    result = list()
    for i in range(10):
        result[i] = i
    return result

তবে এটি এখনও চিহ্ন হারিয়েছে; rangeকিছু ঐন্দ্রজালিক শব্দ যে ভাবে ভাষা অংশ নয় forএবং defআছে, কিন্তু এর পরিবর্তে এটি একটি ফাংশন আছে। এবং অনুমান যে ফাংশন কি ফিরে? এটি সঠিক - inte সংখ্যার পূর্ণসংখ্যার একটি তালিকা। সুতরাং পুরো ফাংশন ধসে পড়ে

def create_list():
    return range(10)

এবং এখন আপনি দেখুন কেন আমাদের কোনও ফাংশন নিজেরাই লেখার দরকার নেই; rangeইতিমধ্যে আমরা ফাংশনটি খুঁজছি যদিও, আবার, তালিকার "প্রাক-আকার" করার কোনও প্রয়োজন বা কারণ নেই।


4

আমি কিছুটা অবাক হয়েছি যে একটি প্রাথমিক সূচনা তৈরির সবচেয়ে সহজ উপায় এইগুলির কোনও উত্তর নয়। ফাংশনটিতে কেবল একটি জেনারেটর ব্যবহার করুন list:

list(range(9))

1
এই বিষয়ে কেউ কেন মন্তব্য করেন তা সম্পর্কে কিছুটা কৌতূহল ... আমি অজগর নূব এবং আমি এইটিকে যেতে যাওয়ার মতো দেখায় তবে কেউ কিছুই বলে না। হতে পারে পরিসীমা ফাংশন ব্যয়বহুল বা কিছু হতে পারে?
এএফপি_৫৫৫

3
এই সমস্যাটি হ'ল এই উত্তরটি প্রশ্ন অনুযায়ী খালি তালিকা তৈরি করে না, আপনি [0, 1, 2, 3, 4, 5, 6, 7, 8] দিয়ে শেষ করবেন যা পরিসীমা (9) ফাংশনটি করে ।
এখনই

কেন মোড়ানো range(9)মধ্যে list()? range(9)ইতিমধ্যে একটি তালিকা ফেরত না ?
জিল

2
@ জাইল rangeএকটি তালিকা নয়, বা জেনারেটরও নয়। এটি একটি অন্তর্নির্মিত অপরিবর্তনীয় সাবক্লাস Sequence
নুনো আন্দ্রে

@ এএফপি_ 5৫৫ আমার মনে হয় আসল প্রশ্নটি কেন এটিকে বেশি বঞ্চিত করা হয়নি, কারণ এটি সত্যই প্রশ্নের উত্তর দেয় না এবং এর অনিচ্ছাকৃত পরিণতিও হতে পারে।
এরিক

4

nনেস্টেড তালিকা উপলব্ধি ব্যবহার করে আকারের 2 ডি ম্যাট্রিক্স তৈরি করার একটি সহজ উপায় :

m = [[None for _ in range(n)] for _ in range(n)]

1

পাইথনে 2D তালিকার জন্য আমার কোডটি এখানে নং পড়বে। ইনপুট থেকে সারিগুলির:

empty = []
row = int(input())

for i in range(row):
    temp = list(map(int, input().split()))
    empty.append(temp)

for i in empty:
    for j in i:
        print(j, end=' ')
    print('')

-2

একই ধরণের সমস্যার সন্ধান করার সময় আমি এই এসও প্রশ্নটি জুড়ে এসেছি। আমাকে একটি 2 ডি অ্যারে তৈরি করতে হয়েছিল এবং তারপরে প্রতিটি তালিকার কিছু উপাদান (2 ডি অ্যারেতে) একটি ডিকের উপাদানগুলির সাথে প্রতিস্থাপন করতে হয়েছিল। আমি তখন এই এসও প্রশ্নটি পেলাম যা আমাকে সাহায্য করেছিল, সম্ভবত এটি অন্যান্য নবজাতককে কাছাকাছি আসতে সহায়তা করবে। মূল কৌশলটি হ'ল 2D অ্যারেটিকে নমপি অ্যারে হিসাবে আরম্ভ করার পরে array[i,j]তার পরিবর্তে ব্যবহার করা array[i][j]

রেফারেন্সের জন্য এটি কোডের টুকরো যেখানে আমাকে এটি ব্যবহার করতে হয়েছিল:

nd_array = []
for i in range(30):
    nd_array.append(np.zeros(shape = (32,1)))
new_array = []
for i in range(len(lines)):
    new_array.append(nd_array)
new_array = np.asarray(new_array)
for i in range(len(lines)):
    splits = lines[i].split(' ')
    for j in range(len(splits)):
        #print(new_array[i][j])
        new_array[i,j] = final_embeddings[dictionary[str(splits[j])]-1].reshape(32,1)

এখন আমি জানি আমরা তালিকা বোঝাপড়াটি ব্যবহার করতে পারি তবে সরলতার জন্য আমি লুপের জন্য নেস্টেড ব্যবহার করছি। আশা করি এটি এই পোস্টটি জুড়ে আসা অন্যদের সহায়তা করবে।


-2

এটি একটি ফাংশন হিসাবে আরও পুনরায় ব্যবহারযোগ্য করুন।

def createEmptyList(length,fill=None):
    '''
    return a (empty) list of a given length
    Example:
        print createEmptyList(3,-1)
        >> [-1, -1, -1]
        print createEmptyList(4)
        >> [None, None, None, None]
    '''
    return [fill] * length

-3
s1 = []
for i in range(11):
   s1.append(i)

print s1

একটি তালিকা তৈরি করতে কেবল এই বন্ধনী ব্যবহার করুন: "[]"

একটি তালিকায় কিছু যুক্ত করতে, list.append () ব্যবহার করুন


-3

এই কোডটি এমন একটি অ্যারে তৈরি করে যাতে 10 টি এলোমেলো সংখ্যা থাকে।

import random
numrand=[]
for i in range(0,10):
   a = random.randint(1,50)
   numrand.append(a)
   print(a,i)
print(numrand)

3
তাই আপনাকে স্বাগতম। আপনার উত্তর সত্যিই বিশেষভাবে প্রশ্নের সমাধান করে না। Stackoverflow.com/help/how-to-answer
নিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.