PDA

View Full Version : جابه جایی دو عنصر در لیست



Salazar.mi
سه شنبه 19 فروردین 1399, 14:33 عصر
سلام
من میخوام وقتی دو عنصر لیست را عوض کردم هم لیست اولیه را داشته باشم هم لیستی که عناصرش عوض شده
اومدم اولش لیست را ریختم تو یه لیست دیگه به اسم b ولی بازم نشد




a=[1,2,3]
b=a
a[0],a[2]=a[2],a[0]
print(a)
print(b)

اینم خروجی



[3, 2, 1]
[3, 2, 1]

sd702004
سه شنبه 19 فروردین 1399, 16:50 عصر
اگر درست متوجه منظور تون شده باشم بایستی خط دوم رو اینطوری بنویسید:

b = a.copy()

Salazar.mi
سه شنبه 19 فروردین 1399, 18:02 عصر
بی نهایت ممنونم جواب دادین
کاملا درسته
ولی راستش اینجا میام از همین قاعده استفاده میکنم نمیشه



u=list.copy()for x in list:
#a makan 0 dar yek list az majmooe ra neshan midahad
a=list
[list.index(x)].index(0)
try:
if x.index(a + 3) in x:
x[a], x[a + 3] = x[a + 3], x[a]
except:
pass
continue


print(list)
print(u)



خروجی



[[3, 1, 7, 8, 2, 4, 0, 6, 5], [2, 0, 8, 3, 5, 1, 4, 6, 7]]
[[3, 1, 7, 8, 2, 4, 0, 6, 5], [2, 5, 8, 3, 0, 1, 4, 6, 7]]
[[3, 1, 7, 8, 2, 4, 0, 6, 5], [2, 5, 8, 3, 0, 1, 4, 6, 7]]


لیست اول قبل از جابه جایی
لیست دوم بعد از جابه جابی
لیست سوم u
:ناراحت:

sd702004
سه شنبه 19 فروردین 1399, 20:03 عصر
با توجه به اینکه در این مثال لیست تون خودش شامل یک لیست دیگه هست شرایطش با سوال اول تون متفاوته. یک راه ساده میتونه این باشه:

u = [ list[0].copy(), list[1].copy() ]

یا این روش:

u = []
for i in list: u.append(i.copy())

روش دیگه هم استفاده از deepcopy هست. برای این کار کافیه ماژول copy رو ایمپورت کنید و کد رو اینطوری تغییر بدین:


import copy
u = copy.deepcopy(list)

پیشنهاد میکنم این لینک (https://docs.python.org/3.8/library/copy.html) رو هم مطالعه کنید

Salazar.mi
سه شنبه 19 فروردین 1399, 23:30 عصر
بی نهایت ممنونم
کاملا درسته
واقعلا ممنون