Λειτουργία κάνουν επί τόπου αλλαγές του καταλόγου

ψήφοι
-1

Θέλω να αλλάξω τη θέση των δύο καταλόγων μέσα σε μια λίστα. Σαν αυτό:

A = [[2,3,4], [5,-3,6]]
swap(A[0], A[1])
print(A)
#[[5,-3,6],[2,3,4]]

Αυτό δεν λειτουργεί (γιατί;):

def swap(row1,row2):
 temp = row2
 row2 = row1
 row1 = temp

Ενώ αυτό λειτουργεί (γιατί;):

def swap(row1,row2):
    for i in range(0,len(row2)):
     temp = row2[i]
     row2[i] = row1[i]
     row1[i] = temp
Δημοσιεύθηκε 27/11/2018 στις 17:37
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Python περνάει αναφοράς με βάση την αξία. Στη πρώτη φορά τη λειτουργία, θα περάσει σε αναφορές σε row1και row2, αλλάζετε αυτές τις αναφορές, αλλά αυτό δεν αλλάζει τη λίστα στο εξωτερικό.

Αν θέλετε να ανταλλάξετε τα στοιχεία σε μια λίστα σαν αυτό, θα πρέπει να περάσει τη λίστα με έτσι ώστε να τροποποιήσετε τις αναφορές στον κατάλογο:

def swap(mylist):
    mylist[0], mylist[1] = mylist[1], mylist[0]

# This works for a list of ints
this_list = [1, 2]
swap(this_list)
this_list
# [2, 1]

# Or for a list of lists (Note that the lengths aren't the same)
that_list = [[1, 2, 3], [4, 5]]
swap(that_list)
that_list
# [[4, 5], [1, 2, 3]]

(Αξίζει να σημειωθεί, επίσης, είναι ότι μπορείτε να κάνετε πολλαπλές εργασίες με πύθωνα, έτσι ώστε να μην χρειάζεται να χρησιμοποιήσετε μια tempμεταβλητή.)

Απαντήθηκε 27/11/2018 στις 17:38
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more