استفسار في القوائم


#1

what is the difference between :

list = list + [5,6]
and
list += [5,6]

#2

لا يوجد فرق في النتيجة الاثنان يعطيان نفس النتيجة
لكن الثانية هي فقط اختصار للاولى
يمكنك تجربة الطريقة الاولى بكتابة التالي:

liste =[1,2,3]
liste = liste + [5,6]
print(liste)

و تجربة الطريقة الثانية بكتابة:

liste =[1,2,3]
liste += [5,6]
print(liste)

ستجدين نفس النتيجة


#3

لكن في حالات أخرى متقدمة يمكن ان يوجد هناك فرق

list0 = [1, 2, 3]
print(id(list0))

list1 = list0 + [5,6]
print(id(list1))


list1 += [5,6]
print(id(list1))

في هذا الكود مثلا فإن طريقة
list = list +
تصنع list جديدة
أي object جديد
و تنسخ كل العناصر من ال list السابقة
يمكنك تجريب الكود :blush:


#4

هذا ما كنت افهمه ولكن في هذا الكود اختلف الناتج :

list1 = [1,2,3,4,5]
list2 = [1,2,3,4,5]

def proc(mylist):
    mylist = mylist + [6, 7]

def proc2(mylist):
    mylist.append(6)
    mylist.append(7)
print list1
proc(list1)
print list1
print list2
proc2(list2)
print list2


#5
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

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


#6

list3 = [1,2,3,4,5]
def proc3(mylist):
    mylist += [6,7]
print 
print list3
proc3(list3)
print list3

#7

the output :

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


#8

نعم أحسنت
هذا ما فسرته في المثال الثاني لكن باستعمال index عناصر القوائم

و في مثالك أيضا النتيجة تختلف ايضا عند مناداة دالة تحتوي على قائمة فإن النتيجة ستعطي قائمة تحتوي على عناصر القائمة التي في الدالة و عناصر القائمة الجديدة.
رائع @asmaa_salih :ok_hand::ok_hand::clap:


#9

ا @asmaa_salih
عند استعمال الاختصار += على القوائم فإن بايثون تحت البساط يستدعي extend
أي ان هذا الكود
list += [5, 7]
هي نفسها
list.extend([5, 7])

لذلك في القوائم يجب ان نفرق بين
list = list + something
و
list += something