2017-05-22 2 views
1

Ich versuche, die Liste mit String zu umkehren, wenn ich es von der Funktion durch Funktion bin Aufruf und es funktioniert nicht etwasWarum ist es, wenn eine andere Funktion aufgerufen wird, die die Liste nicht ändert?

>>> 
change_list = lambda lst_chn: lst_chn[::-1] 

def check(lst_chk): 
    change_list(lst_chk) 
    return lst_chk 

print(check([1,2,3,4,5,6,7,8])) 
print(check(['1','2','3','4','5','6','7','8'])) 
<<< 
[1, 2, 3, 4, 5, 6, 7, 8] 
['1', '2', '3', '4', '5', '6', '7', '8'] 

Aber wenn ich es nur eine Funktion zu tun mit es funktioniert ziemlich gut.

>>> 
print_list = lambda lst: lst[::-1] 

lst_int = [1,2,3,4,5,6,7,8] 
lst_str = ['1','2','3','4','5','6','7','8'] 

print(print_list(lst_int)) 
print(print_list(lst_str)) 
<<< 
[8, 7, 6, 5, 4, 3, 2, 1] 
['8', '7', '6', '5', '4', '3', '2', '1'] 

Warum ist das?

Antwort

0

Im ersten Fall sind Sie das Ergebnis und die Rückkehr der ursprüngliche unveränderte Sequenz Dumping:

def check(lst_chk): 
    change_list(lst_chk) # reversed sequence is discarded 
    return lst_chk 

Im zweiten Fall, kehren Sie die umgekehrte Reihenfolge und print es.

[::-1]nicht an Ort und Stelle arbeiten, gibt es das Ergebnis, lst_chk genau das gleiche nach change_list aufgerufen wird.

können Sie entweder das Rück die umgekehrte Reihenfolge:

def check(lst_chk): 
    return change_list(lst_chk) 

einen ähnlichen Effekt zu Ihrem zweiten Fall oder zu erreichen, wenn Sie immer mit list s arbeiten, reverse verwenden, die an Ort und Stelle tätig ist.

Verwandte Themen