পাইথনে দ্বি-মাত্রিক অ্যারে কীভাবে সংজ্ঞায়িত করা যায়


723

আমি এর মতো প্রাথমিক দৈর্ঘ্য ছাড়াই একটি দ্বি-মাত্রিক অ্যারে সংজ্ঞায়িত করতে চাই:

Matrix = [][]

কিন্তু এটা কাজ করে না...

আমি নীচের কোডটি চেষ্টা করেছি, তবে এটিও ভুল:

Matrix = [5][5]

ত্রুটি:

Traceback ...

IndexError: list index out of range

আমার ভুল কি?


14
একটি অ্যারে বা অন্য কোনও জিনিস সংজ্ঞায়িত করে না । আপনি যাইহোক, উত্তরগুলি এখানে দেখানো হিসাবে বহুমাত্রিক ক্রম তৈরি করতে পারেন। মনে রাখবেন পাইথন ভেরিয়েবলগুলি টাইপযুক্ত নয়, তবে মানগুলি দৃ strongly ়ভাবে টাইপ করা হয়।
সিঙ্গেলাইজেশন ইলিমিনেশন

1
আমি বিভ্রান্ত অন্যান্য ভাষা থেকে আগত: এটি 1D-অ্যারে এবং 1D-অ্যারেযুক্ত 1D-অ্যারের মধ্যে পার্থক্য। এবং এএফআইএকের পাইথনে বহু-মাত্রিক-অ্যারে (বা তালিকা) থাকার কোনও উপায় নেই। এখানে বলা উচিত ...
ডার্ক রিচেল

উত্তর:


1008

আপনি প্রযুক্তিগতভাবে একটি অনির্ধারিত অ্যারে সূচক করার চেষ্টা করছেন। আইটেমগুলি যুক্ত করার আগে আপনাকে প্রথমে তালিকার সাথে বাইরের তালিকাটি শুরু করতে হবে; পাইথন এটিকে "তালিকা বোঝার" বলে।

# Creates a list containing 5 lists, each of 8 items, all set to 0
w, h = 8, 5;
Matrix = [[0 for x in range(w)] for y in range(h)] 

আপনি এখন তালিকায় আইটেম যুক্ত করতে পারেন:

Matrix[0][0] = 1
Matrix[6][0] = 3 # error! range... 
Matrix[0][6] = 3 # valid

নোট করুন যে ম্যাট্রিক্সটি "y" অ্যাড্রেস মেজর, অন্য কথায়, "এক্স ইনডেক্স" এর আগে "y ইনডেক্স" আসে।

print Matrix[0][0] # prints 1
x, y = 0, 6 
print Matrix[x][y] # prints 3; be careful with indexing! 

যদিও আপনি নিজের ইচ্ছামত তাদের নাম রাখতে পারেন, তবুও যদি আপনি অভ্যন্তরীণ এবং বাহ্যিক উভয় তালিকার জন্য "x" ব্যবহার করেন এবং একটি বর্গাকার ম্যাট্রিক্স চান না তবে সূচকের সাথে উদ্ভূত হতে পারে এমন কিছু বিভ্রান্তি এড়াতে আমি এই দিকে তাকিয়ে থাকি।


219
[[০ টি রেঞ্জের জন্য (কলস_কাউন্ট)) এক্স রেঞ্জের জন্য (সারি_কাউন্ট)]
গীতির

3
অ্যাডেমার 111190 দ্বারা বিজোড় সম্পাদনা। পাইথন 3-তে কোনও এক্সরেঞ্জ নেই তবে আপনাকে অজগর 2 ব্যবহার করতে হবে যদি আপনি অযথাই অবজেক্ট তৈরি করতে না চান তবে এক্সরেঞ্জ হ'ল সঠিক ফাংশন।
ডেভ

4
@ ডেভ যদি আপনার এটি শূন্য-পূরণের প্রয়োজন না হয় rangeতবে সরাসরি অভ্যন্তরীণ তালিকা তৈরি করতে ব্যবহার করতে পারেন:[range(5) for x in range(5)]
অ্যালানজডস

2
@ অ্যালানজডস - এটি সত্য, তবে আপনি এখনও বহিরাগত পুনরাবৃত্তির জন্য পাইথন 2 তে অনেকগুলি অপ্রয়োজনীয় অবজেক্টের রেফারেন্স তৈরি করেন (খুব বড় পরিসীমা দিয়ে এটি চেষ্টা করুন)। এছাড়াও, কিছু মূল্যের সূচনাটি আপনি যা চান তা প্রায় সর্বদা হয় - এবং এটি 0 এর চেয়ে বেশি নয় range পরিসীমা একটি পুনরাবৃত্তিযোগ্য সংগ্রহ দেয় - এক্সরেঞ্জ একটি জেনারেটর প্রদান করে। আমার বক্তব্যটি হ'ল এডেমার এমন কিছু "সংশোধন" করেছিলেন যা আসলে তার সংশোধনের চেয়ে আরও সাধারণভাবে সঠিক এবং দক্ষ ছিল।
ডেভ

10
@ 6 প্যাককিড [0] * wঅংশটি দুর্দান্ত, তবে [[0] * w] * h]অপ্রত্যাশিত আচরণ তৈরি করবে। চেষ্টা করুন mat = [[0] * 3] * 3; mat[0][1] = 10; print(mat == [[0, 10, 0], [0, 10, 0], [0, 10, 0]])এবং mat = [[0] * 3 for i in range(3)]; mat[0][1] = 10; print(mat == [[0, 10, 0], [0, 0, 0], [0, 0, 0]])
প্রেরক 15

406

আপনি যদি সত্যিই একটি ম্যাট্রিক্স চান, আপনি ব্যবহার বন্ধ হতে পারে numpy। ম্যাট্রিক্স অপারেশনগুলি numpyপ্রায়শই দুটি মাত্রা সহ একটি অ্যারে প্রকার ব্যবহার করে। একটি নতুন অ্যারে তৈরির অনেকগুলি উপায় রয়েছে; সবচেয়ে zerosকার্যকরগুলির মধ্যে একটি হ'ল ফাংশন, যা একটি আকারের প্যারামিটার নেয় এবং প্রদত্ত আকারের একটি অ্যারে প্রদান করে মানগুলি শূন্যের সাথে শুরু করে:

>>> import numpy
>>> numpy.zeros((5, 5))
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.]])

2-ডি অ্যারে এবং ম্যাট্রিকগুলি তৈরি করার আরও কয়েকটি উপায় এখানে রয়েছে (কম্প্যাক্টনেসের জন্য আউটপুট সরানো সহ):

numpy.arange(25).reshape((5, 5))         # create a 1-d range and reshape
numpy.array(range(25)).reshape((5, 5))   # pass a Python range and reshape
numpy.array([5] * 25).reshape((5, 5))    # pass a Python list and reshape
numpy.empty((5, 5))                      # allocate, but don't initialize
numpy.ones((5, 5))                       # initialize with ones

numpymatrixপাশাপাশি একটি প্রকার সরবরাহ করে , তবে এটি আর কোনও ব্যবহারের জন্য সুপারিশ করা হয় numpyনা এবং ভবিষ্যতে এটিকে সরিয়ে ফেলা হতে পারে ।


78
আপনি যখনই ম্যাট্রিক করতে চান, আপনি নিম্পি ব্যবহার করতে চান। এই উত্তরটি প্রথম হওয়া উচিত।
প্যাট বি

2
প্রশ্নটি "ম্যাট্রিক্স" ইংরেজি শব্দটি ব্যবহার করে এমন অর্থ এই নয় যে তাদের np.matrixপ্রতিনিধিত্ব করার জন্য তাদের ব্যবহার করা উচিত । নিম্পিতে ম্যাট্রিক্স উপস্থাপনের সঠিক উপায়টি হ'ল একটিarray
ব্যবহারকারী 2357112 মনিকা

@ ব্যবহারকারী 2357112, এবং আপনি দেখতে পাচ্ছেন, বেশিরভাগ উদাহরণগুলি arrayম্যাট্রিকের পরিবর্তে উপরের আউটপুট- এর তালিকাভুক্ত । যদিও এটি সর্বদা উত্সাহিত হয় না, matrixপ্রসঙ্গের বিষয়গুলির ব্যবহারের বৈধ কারণ রয়েছে ।
প্রেরক 21

1
@ সেন্ডারেল, আপনি কি ব্যবহারের কারণে প্রসারিত করতে পারেন matrix? থেকে@অপারেটরটি চালু হয়েছিল, এই পোস্টটি লেখা হওয়ার পরে আরও একটি কম কারণ বলে মনে হচ্ছে।
জেপি

1
@ জেপ্পি, পোস্টটি আগে যেমন বলেছিল, মতলব থেকে আসা লোকেরা এটি দরকারী মনে করতে পারেন। তবে numpyদস্তাবেজগুলি এখন নির্দেশ করে যে ক্লাসটি অবচিত এবং হতে পারে ভবিষ্যতে সরানো , তাই আমি এটিকে উত্তর থেকে সরিয়ে নিয়েছি।
প্রেরক

337

তালিকার তালিকা শুরু করার জন্য এখানে একটি সংক্ষিপ্ত স্বরলিপি দেওয়া হয়েছে:

matrix = [[0]*5 for i in range(5)]

দুর্ভাগ্যক্রমে এটিকে ছোট করে দেওয়ার মতো 5*[5*[0]]কাজ করা সত্যিই কার্যকর হয় না কারণ আপনি একই তালিকার ৫ টি অনুলিপি সহ শেষ করেন, সুতরাং আপনি যখন তার একটির সংশোধন করেন তখন সেগুলি সমস্ত পরিবর্তিত হয়, উদাহরণস্বরূপ:

>>> matrix = 5*[5*[0]]
>>> matrix
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> matrix[4][4] = 2
>>> matrix
[[0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2], [0, 0, 0, 0, 2]]

4
"সংক্ষিপ্তকরণ" ব্যর্থতার পিছনে যুক্তিটি কি আপনি ব্যাখ্যা করতে পারেন? এক্ষেত্রে পাইথন আউটপুট একই তালিকার অনুলিপি এবং কেন বিভিন্ন ক্ষেত্রে বিভিন্ন কক্ষের অ্যারে রয়েছে [0]*5?
মাইক 622867

12
উপরের মন্তব্যগুলি ঠিক সত্য নয়: [0] * 5 টি একই সংখ্যার ০ টি উপস্থাপন করে একই অবজেক্টের 5 বার রেফারেন্স সহ একটি ক্রম তৈরি করে তবে আপনি এটি কখনই লক্ষ্য করবেন না কারণ 0 পরিবর্তনযোগ্য (আমি বলব 0 টি একটি মানের মতো আচরণ করে) - অথবা আপনি এটিকে আদিম উপাত্তের ধরণ হিসাবে ভাবতে পারেন - কারণ এটি পরিবর্তনযোগ্য তাই আপনি অনুলিপিগুলি না দিয়ে একই বস্তুর রেফারেন্স নিয়ে কখনই সমস্যা পেতে পারেন না))
dreua

4
আরও অজগর: [[0]*5 for _ in range(5)]আপনি ব্যবহার করছেন না এমন বেনামে লুপের কাউন্টার সহ
জ্যান-ফ্রানসোয়া ফ্যাব্রে

চমৎকার যে আপনি দ্বিতীয় উদাহরণে অগভীর অনুলিপিটির সমস্যাটি দেখিয়েছেন।
8:55

ধন্যবাদ @ ড্রেয়া, আমি [0]*5ঠিক বিভ্রান্ত হয়ে পড়েছিলাম ঠিক কীভাবে কাজ করে। এখন আমি বুঝতে পারি কেন [{0}]*8খারাপ ধারণাও হবে।
কুকু

110

আপনি যদি খালি ম্যাট্রিক্স তৈরি করতে চান তবে সঠিক বাক্য গঠন ax

matrix = [[]]

এবং আপনি যদি 0 দিয়ে ভরা 5 আকারের একটি ম্যাট্রিক্স উত্পন্ন করতে চান,

matrix = [[0 for i in xrange(5)] for i in xrange(5)]

@ কোরেটগুয়ে কারণ ম্যাট্রিক্সটি পাইথন তালিকা (সারিগুলি) ব্যবহার করে অন্য তালিকার (কলামগুলি) ভিতরে বাস করে।
এলিগ

2
পাইথন -3 ব্যবহার সীমার ফাংশন পরিবর্তে xrange func জন্য
রাকেশ Chaudhari

76

যদি আপনি চান সমস্ত কিছু উপাদান রাখার জন্য একটি দ্বিমাত্রিক ধারক, আপনি তার পরিবর্তে সহজেই একটি অভিধান ব্যবহার করতে পারেন:

Matrix = {}

তারপরে আপনি এটি করতে পারেন:

Matrix[1,2] = 15
print Matrix[1,2]

এটি কাজ করে কারণ 1,2এটি একটি দ্বৈত এবং আপনি অভিধানটিকে সূচীকরণের মূল হিসাবে ব্যবহার করছেন। ফলাফলটি বোবা স্পার্স ম্যাট্রিক্সের মতো।

ওসা এবং জোসাপ ভলস দ্বারা নির্দেশিত হিসাবে, আপনি ব্যবহার করতে পারেন Matrix = collections.defaultdict(lambda:0)যাতে অনুপস্থিত উপাদানগুলির ডিফল্ট মান থাকে 0

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


2
তারপরে আপনি import collections; Matrix = collections.defaultdict(float)অবিচ্ছিন্ন উপাদানগুলির জন্য শূন্যগুলি বিকল্প হিসাবেও করতে পারেন ।
osa

2
কী হিসাবে টিপল (1,2) এর জন্য কোনও ডিক অ্যাক্সেস না করাতে ও (এন) এর সবচেয়ে খারাপ ক্ষেত্রে জটিলতা রয়েছে। অভ্যন্তরীণভাবে এটি tuples হ্যাশ হবে। যেখানে একটি 2 ডি অ্যারে ব্যবহার করা ও (1) সময় জটিলতা সূচক অ্যাক্সেস করতে [1,2] অ্যাক্সেস দিতে পারে। সুতরাং এর জন্য ডিক ব্যবহার করা ভাল পছন্দ হওয়া উচিত নয়।
ভটসাল

@ ওয়াটসাল উইকি.পিথন.আর. / মাইন / টাইমকম্প্লেসিটি বলে যে গড় কেস ও (১) তবে আপনি সবচেয়ে খারাপ ক্ষেত্রে ঠিক বলেছেন। যাইহোক, আপনি প্রচুর আইটেমের কথা না বললে আপনি এই পার্থক্যের বিষয়ে চিন্তা করবেন না। প্রকৃতপক্ষে, আমি অ্যাক্সেসের সময়ের চেয়ে স্মৃতি সম্পর্কে আরও উদ্বিগ্ন হব।
enobayram

এছাড়াও অ্যালগরিদমের সামগ্রিক জটিলতা O (n ^ 2) এর চেয়ে সমান বা তার বেশি না হওয়া পর্যন্ত আমরা সর্বদা dicts এর ব্যবহার এড়াতে চেষ্টা করি। একটি 'এন' বার হিসাবে ও (এন) অ্যাক্সেসগুলি একটি ও (এন ^ 2) জটিলতা দেয়।
ভাতসাল

@ এনোবায়রাম, দুঃখিত, তবে আমি তাতে রাজি নই। অ্যাসিপটোটিক বিশ্লেষণ সর্বদা ও (এন ^ 2) দেয়, যদি কোনও খারাপ ক্ষেত্রে ও (এন) অ্যাক্সেস 'এন' বার হয়ে যায়। যেখানে এমোরিটাইজড বিশ্লেষণ কম বাউন্ড দিতে পারে। এমওরাইটিজড এবং গড় মামলার মধ্যে একটি বিশাল পার্থক্য রয়েছে ... অনুমান এবং অস্পষ্ট মন্তব্য করার আগে দয়া করে উল্লেখ করুন
ভটসাল

42

পাইথনে আপনি তালিকার একটি তালিকা তৈরি করবেন। আপনাকে সময়ের আগে মাত্রাগুলি ঘোষণা করতে হবে না তবে আপনি এটি করতে পারেন। উদাহরণ স্বরূপ:

matrix = []
matrix.append([])
matrix.append([])
matrix[0].append(2)
matrix[1].append(3)

এখন ম্যাট্রিক্স [0] [0] == 2 এবং ম্যাট্রিক্স [1] [0] == ৩. আপনি তালিকা বোঝার বাক্য গঠনটিও ব্যবহার করতে পারেন। এই উদাহরণটি এটি "দ্বি-মাত্রিক তালিকা" তৈরি করতে দুবার ব্যবহার করেছে:

from itertools import count, takewhile
matrix = [[i for i in takewhile(lambda j: j < (k+1) * 10, count(k*10))] for k in range(10)]

6
extendপ্রথম ক্ষেত্রেও সহায়ক হবে: আপনি যদি এটি শুরু করেন m = [[]]তবে আপনি অভ্যন্তরীণ তালিকায় যুক্ত করতে পারেন (একটি সারি প্রসারিত করুন) m[0].extend([1,2])এবং বাইরের তালিকায় যুক্ত করতে পারেন (একটি নতুন সারি যুক্ত করুন) m.append([3,4]), সেই ক্রিয়াকলাপগুলি আপনাকে ছেড়ে চলে যাবে [[1, 2], [3, 4]]
জিজ্ঞাসা

22

গৃহীত উত্তরটি ভাল এবং সঠিক, তবে এটি পুরোপুরি খালি অ্যারে তৈরি করতে আমি এটি ব্যবহার করতে পেরে বুঝতে সময় লাগল took

l =  [[] for _ in range(3)]

ফলাফল স্বরূপ

[[], [], []]

22

আপনার তালিকাগুলির একটি তালিকা তৈরি করা উচিত এবং নেস্টেড বোধগম্যতা ব্যবহার করার সর্বোত্তম উপায়:

>>> matrix = [[0 for i in range(5)] for j in range(5)]
>>> pprint.pprint(matrix)
[[0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0]]

আপনার [5][5]উদাহরণে, আপনি ভিতরে একটি পূর্ণসংখ্যা "5" দিয়ে একটি তালিকা তৈরি করছেন এবং এর 5 তম আইটেমটি অ্যাক্সেস করার চেষ্টা করছেন এবং এটি প্রাকৃতিকভাবে একটি সূচিপত্র উত্থাপন করে কারণ কোনও 5 তম আইটেম নেই:

>>> l = [5]
>>> l[5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

আসলে ROW_INDEX ( 'আমি') এবং column_index ( 'ঞ') জন্য ক্রম নিম্নরূপ হয়: '>>> ম্যাট্রিক্স = [[0 সীমার মধ্যে সীমার মধ্যে column_index (5)] ROW_INDEX জন্য (5)]'
অনিরুদ্ধ Kalburgi

22
rows = int(input())
cols = int(input())

matrix = []
for i in range(rows):
  row = []
  for j in range(cols):
    row.append(0)
  matrix.append(row)

print(matrix)

এত লম্বা কোড কেন আপনিও Pythonজিজ্ঞাসা করছেন?

যখন আমি পাইথনের সাথে স্বাচ্ছন্দ্য বোধ করছিলাম না তখন আমি 2 ডি ম্যাট্রিক্স লেখার জন্য একক লাইনের উত্তরগুলি দেখেছি এবং নিজেকে বলেছিলাম যে আমি আবার পাইথনে 2-ডি ম্যাট্রিক্স ব্যবহার করতে যাচ্ছি না। (এই একক লাইনগুলি খুব ভয়ঙ্কর ছিল এবং পাইথন কী করছে সে সম্পর্কে এটি আমাকে কোনও তথ্য দেয়নি Also এছাড়াও নোট করুন যে আমি এই সংক্ষিপ্তগুলি সম্পর্কে অবগত নই))

যাইহোক, এখানে একটি শিক্ষানবিসের কোড যা সি, সিপিপি এবং জাভা ব্যাকগ্রাউন্ড থেকে আসে

পাইথন প্রেমিক এবং বিশেষজ্ঞদের কাছে দ্রষ্টব্য: দয়া করে কেবল ভোট কোডটি নিচে রাখবেন না কারণ আমি একটি বিস্তারিত কোড লিখেছি।


13

সহজ পাঠের জন্য একটি পুনর্লিখন:

# 2D array/ matrix

# 5 rows, 5 cols
rows_count = 5
cols_count = 5

# create
#     creation looks reverse
#     create an array of "cols_count" cols, for each of the "rows_count" rows
#        all elements are initialized to 0
two_d_array = [[0 for j in range(cols_count)] for i in range(rows_count)]

# index is from 0 to 4
#     for both rows & cols
#     since 5 rows, 5 cols

# use
two_d_array[0][0] = 1
print two_d_array[0][0]  # prints 1   # 1st row, 1st col (top-left element of matrix)

two_d_array[1][0] = 2
print two_d_array[1][0]  # prints 2   # 2nd row, 1st col

two_d_array[1][4] = 3
print two_d_array[1][4]  # prints 3   # 2nd row, last col

two_d_array[4][4] = 4
print two_d_array[4][4]  # prints 4   # last row, last col (right, bottom element of matrix)

13

ব্যবহার করুন:

matrix = [[0]*5 for i in range(5)]

প্রথম মাত্রার জন্য * 5 কাজ করে কারণ এই স্তরে ডেটা পরিবর্তনযোগ্য।


5
আমি সম্ভবত এটি লিখবmatrix = [[0]*cols for _ in range(rows)]
শীতল শাহ

12

শূন্যগুলির একটি ম্যাট্রিক্স ঘোষণা করতে (বেশী):

numpy.zeros((x, y))

যেমন

>>> numpy.zeros((3, 5))
    array([[ 0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.],
   [ 0.,  0.,  0.,  0.,  0.]])

অথবা numpy.ones ((x, y)) উদা

>>> np.ones((3, 5))
array([[ 1.,  1.,  1.,  1.,  1.],
   [ 1.,  1.,  1.,  1.,  1.],
   [ 1.,  1.,  1.,  1.,  1.]])

এমনকি তিনটি মাত্রাও সম্ভব। ( http://www.astro.ufl.edu/~warner/prog/python.html দেখুন -> বহু মাত্রিক অ্যারে)


12

আমি সাধারণত পাইথনে 2D অ্যারে তৈরি করি।

col = 3
row = 4
array = [[0] * col for _ in range(row)]

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


11

আমি আমার প্রথম পাইথন স্ক্রিপ্টে আছি এবং আমি বর্গক্ষেত্রের ম্যাট্রিক্স উদাহরণটি দেখে কিছুটা বিভ্রান্ত হয়েছি তাই আশা করি নীচের উদাহরণটি আপনাকে কিছুটা সময় বাঁচাতে সহায়তা করবে:

 # Creates a 2 x 5 matrix
 Matrix = [[0 for y in xrange(5)] for x in xrange(2)]

যাতে

Matrix[1][4] = 2 # Valid
Matrix[4][1] = 3 # IndexError: list index out of range

10

NumPy ব্যবহার করে আপনি খালি ম্যাট্রিক্সটি এভাবে শুরু করতে পারেন:

import numpy as np
mm = np.matrix([])

এবং পরে এই জাতীয় ডেটা যুক্ত করুন:

mm = np.append(mm, [[1,2]], axis=1)

"তালিকান বোধগম্যতা" না দিয়ে নমপি ব্যবহারের পক্ষে কী হবে?
মনিকার

7

আমি কমা দ্বারা পৃথক করা ফাইলগুলিতে এর মতো পড়েছি:

data=[]
for l in infile:
    l = split(',')
    data.append(l)

তালিকা "তথ্য" এরপরে সূচী ডেটা [সারি] [কল] সহ তালিকার একটি তালিকা


7

আপনি যদি তালিকার তালিকার শর্তে (আমার মতে অনেক বেশি প্রাকৃতিক) শর্তাবলীতে ভাবতে বাধ্য হওয়ার চেয়ে এটি 2 ডি অ্যারে হিসাবে ভাবতে সক্ষম হতে চান তবে আপনি নিম্নলিখিতটি করতে পারেন:

import numpy
Nx=3; Ny=4
my2Dlist= numpy.zeros((Nx,Ny)).tolist()

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


হয় numpy.matrixসমতুল্য numpy.zerosহচ্ছে তালিকা ছাড়া শূন্য ছাড়া?
মনিকার

6

এর জন্যই অভিধান তৈরি করা হয়েছে!

matrix = {}

আপনি কী এবং মান দুটি উপায়ে সংজ্ঞায়িত করতে পারেন :

matrix[0,0] = value

অথবা

matrix = { (0,0)  : value }

ফলাফল:

   [ value,  value,  value,  value,  value],
   [ value,  value,  value,  value,  value],
   ...

6

ব্যবহার করুন:

import copy

def ndlist(*args, init=0):
    dp = init
    for x in reversed(args):
        dp = [copy.deepcopy(dp) for _ in range(x)]
    return dp

l = ndlist(1,2,3,4) # 4 dimensional list initialized with 0's
l[0][1][2][3] = 1

আমি মনে করি NumPy যেতে উপায় হয়। আপনি যদি NumPy ব্যবহার না করতে চান তবে উপরেরটি একটি জেনেরিক।


ভ্যানিলা পাইথনের সাথে অদ্ভুত ব্যবহার না করেই কিছু সহজ করার এই প্রচেষ্টাটি আমার পছন্দ।
রিক হেন্ডারসন

4

তালিকা ব্যবহার করে:

matrix_in_python  = [['Roy',80,75,85,90,95],['John',75,80,75,85,100],['Dave',80,80,80,90,95]]

ডিক ব্যবহার করে: আপনি দ্রুত অনুসন্ধানের জন্য এই তথ্যটি হ্যাশ টেবিলের মধ্যেও সঞ্চয় করতে পারেন

matrix = { '1':[0,0] , '2':[0,1],'3':[0,2],'4' : [1,0],'5':[1,1],'6':[1,2],'7':[2,0],'8':[2,1],'9':[2,2]};

ম্যাট্রিক্স ['1'] আপনাকে ও (1) সময়ে ফলাফল দেবে

* এনবি : আপনার হ্যাশ টেবিলের সাথে সংঘর্ষের মোকাবেলা করতে হবে


4

আপনার যদি শুরুর আগে আকারের তথ্য না থাকে তবে দুটি দ্বিমাত্রিক তালিকা তৈরি করুন।

list 1: To store rows
list 2: Actual two-dimensional matrix

1 ম তালিকায় পুরো সারিটি সংরক্ষণ করুন। একবার হয়ে গেলে, তালিকাটি তালিকায় 1 টি সংযুক্ত করুন:

from random import randint

coordinates=[]
temp=[]
points=int(raw_input("Enter No Of Coordinates >"))
for i in range(0,points):
    randomx=randint(0,1000)
    randomy=randint(0,1000)
    temp=[]
    temp.append(randomx)
    temp.append(randomy)
    coordinates.append(temp)

print coordinates

আউটপুট:

Enter No Of Coordinates >4
[[522, 96], [378, 276], [349, 741], [238, 439]]

3
# Creates a list containing 5 lists initialized to 0
Matrix = [[0]*5]*5

এই সংক্ষিপ্ত প্রকাশ সম্পর্কে সতর্ক থাকুন, @ এফজেজের উত্তরে পুরো ব্যাখ্যাটি দেখুন


19
এইভাবে সাবধানতা অবলম্বন করুন, কারণ Matrix[0], Matrix[1], ..., Matrix[4]সমস্ত একই অ্যারেতে নির্দেশ করে, তাই পরে Matrix[0][0] = 3আপনি আশা করতে পারেন Matrix[0][0] == Matrix[1][0] == ... == Matrix[4][0] == 3
গংজিটাওও

1
আপনার মন্তব্যের জন্য ধন্যবাদ gongzhitaao। আমি যদি এটি আরও ভাল করে পড়ে থাকি তবে এটি আমাকে কমপক্ষে আধা ঘন্টা বাঁচাতে পারত .. ম্যাট্রিক্স থাকা যেখানে প্রতিটি সারিতে মেমরির একই জায়গায় নির্দেশ করা খুব কার্যকর বলে মনে হয় না, এবং আপনি কী করছেন তা অবগত না হলে এটা এমনকি বিপজ্জনক! আমি পুরোপুরি নিশ্চিত যে প্রশ্নটি করা মাসউদ আবাসিয়ান এটি করতে চান না।
অ্যাড্রিয়ান

7
আপনার এই উত্তরটি সরানো উচিত, কারণ এটি সঠিক উত্তর নয়। নতুনরা বিভ্রান্ত হতে পারে।
cxxl

2
আপনি কোন উত্তর উল্লেখ করছেন? "এফজে" নামক কোনও ব্যবহারকারী আমি দেখতে পাচ্ছি না (এমনকি মোছা উত্তরেও নয়)।
পিটার মর্টেনসেন

3
l=[[0]*(L) for _ in range(W)]

এর চেয়ে দ্রুত হবে:

l = [[0 for x in range(L)] for y in range(W)] 

2
ইতিমধ্যে নীচে উত্তর দেওয়া একটির সদৃশ জবাব। এছাড়াও [[0]*(L) for i in range(W)]হওয়া উচিত [[0]*(L) for _ in range(W)]যেহেতু iব্যবহৃত যে কোন জায়গায় নয়
আয়ুস Vatsyayan

2

আপনি []নীচের মত একটি বর্গাকার বন্ধনীর সাহায্যে দুটি বা ততোধিক স্কোয়ার ব্র্যাসিং বা তৃতীয় বন্ধনী ( কমা দ্বারা পৃথক করা) নেস্ট করে একটি খালি দ্বিমাত্রিক তালিকা তৈরি করতে পারেন :

Matrix = [[], []]

এখন ধরুন আপনি 1 এ যুক্ত করতে চান Matrix[0][0]তারপরে আপনি টাইপ করুন:

Matrix[0].append(1)

এখন ম্যাট্রিক্স টাইপ করুন এবং এন্টার টিপুন। আউটপুটটি হবে:

[[1], []]


1

যদি আপনার পূর্বনির্ধারিত সংখ্যার সাথে ম্যাট্রিক্সের প্রয়োজন হয় তবে আপনি নীচের কোডটি ব্যবহার করতে পারেন:

def matrix(rows, cols, start=0):
    return [[c + start + r * cols for c in range(cols)] for r in range(rows)]


assert matrix(2, 3, 1) == [[1, 2, 3], [4, 5, 6]]

1

পাইথনে ম্যাট্রিক্স তৈরির জন্য কোড স্নিপেট এখানে রয়েছে:

# get the input rows and cols
rows = int(input("rows : "))
cols = int(input("Cols : "))

# initialize the list
l=[[0]*cols for i in range(rows)]

# fill some random values in it
for i in range(0,rows):
    for j in range(0,cols):
        l[i][j] = i+j

# print the list
for i in range(0,rows):
    print()
    for j in range(0,cols):
        print(l[i][j],end=" ")

আমি যদি কিছু মিস করি তবে প্রস্তাব দিন।

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