2012-02-16 5 views

Odpowiedz

77
new_list = [x+1 for x in my_list] 
+3

Dlaczego nie 'za ew lst: E + = 1 'działa? –

+6

Ta wykłada wyjaśnia: Fakty i mity o nazwach i wartościach Pythona: http://nedbatchelder.com/text/names1.html –

+0

√ Niesamowite informacje. Otwarcie oczu. –

12

Pozostałe odpowiedzi na liście są prawdopodobnie najlepszym rozwiązaniem do prostego dodawania, ale jeśli masz bardziej złożoną funkcję, którą musisz zastosować do wszystkich elementów, to map może być dobrym rozwiązaniem.

W przykładzie będzie to:

>>> map(lambda x:x+1, [1,2,3]) 
[2,3,4] 
+3

'map (1 .__ add__, ...)' działa również. Zauważ, że potrzebujesz spacji między '1' a' .', aby zapobiec analizowaniu przez parser, że jest to float. –

4

Python 2+:

>>> mylist = [1,2,3] 
>>> map(lambda x: x + 1, mylist) 
[2, 3, 4] 

Python 3+:

>>> mylist = [1,2,3] 
>>> list(map(lambda x: x + 1, mylist)) 
[2, 3, 4] 
2

Po pierwsze nie używać słowa 'listy' dla twojej zmiennej. Cieniuje ono słowo kluczowe list.

Najlepszym sposobem jest zrobienie go w miejscu przy użyciu forniru, zanotować [:] oznacza splice:

>>> _list=[1,2,3] 
>>> _list[:]=[i+1 for i in _list] 
>>> _list 
[2, 3, 4] 
+2

To jest dobre dla zmiany istniejącej listy, ale wciąż tworzy nową. Czy używanie generatora jest niebezpieczne, aby uniknąć tworzenia niepotrzebnych list? Tj. '_list [:] = (i + 1 dla i w _list)'. – Alan

+0

@Alan dobry punkt - powinien użyć generatora –

6
>>> [x.__add__(1) for x in [1, 3, 5]] 
3: [2, 4, 6] 

Moją intencją jest, aby odsłonić jeśli pozycja na liście jest liczbą całkowitą obsługuje różne wbudowane funkcje.

+1

Dobre przypomnienie dla nas zagubione w magii rozumienia listy. – npit

3

jeśli chcesz używać NumPy istnieje inna metoda następująco

import numpy as np 
list1 = [1,2,3] 
list1 = list(np.asarray(list1) + 1)