ورود

View Full Version : سوال: مشکل با لیست های چند بعدی در پایتون



code_baz
جمعه 16 اردیبهشت 1390, 12:01 عصر
به این کد نگاه کنید:



>>> a
[[2, 1], [2, 1], [2, 1]]
>>> a[0][0]=10
>>> print a
[[10, 1], [10, 1], [10, 1]]



ولی:


a=[[3, 1], [2, 1], [2, 1]]
>>> a[0][0]=10
>>> print a
[[10, 1], [2, 1], [2, 1]]









یعنی در لیست های چند بعدی که طول همه ی لیست های داخلی برابرند(و داده ای داخل لیست یک به یک با هم برابرند) عمل اختصاص داده نه فقط به اون متغیر تعیین شده بلکه به همه ی هم شماره های اون متغیر در لیست های دیگه نیز انجام میشه

چاره ی این مشکل چیه چون من تو حل بعضی الگوریتم ها و برنامه ها به همین دلیل به نتیجه ای نرسیدم
اصلا کسی میدونه دلیل و هدف از این کار در پایتون چیه؟

code_baz
جمعه 16 اردیبهشت 1390, 16:47 عصر
جواب خودم به خودم!:
من لیست های چند بعدی رو با عملگر * میسازم مثلا n=[[0]*3]*2 ولی اگر از حلقه تودرتو برای ساختن اینگونه لیست ها استفاده بشه دیگه مشکل بالا اتفاق نمی افته.

>>> n=[]
>>> for i in range(3):
l=[]
for j in range(4):
l.append(0)
n.append(l)


>>> n
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>> n[0][0]=1
>>> n
[[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

code_baz
جمعه 16 اردیبهشت 1390, 16:49 عصر
در واقع با عملگر * فقط بارها یک ارجاع به لیست ابتدایی میدیم وعمل کپی صورت نمیگیره:
به این لینک نگاه کنید:

http://stackoverflow.com/questions/1889080/problem-creating-nnn-list-in-python

MSK
دوشنبه 26 اردیبهشت 1390, 13:10 عصر
یکم کوتاه تر همون کد شما:


lst = [[0 for i in range(4)] for j in range(3)]