2011-02-07 18 views
38

ja wciąż czytanie samouczek Python 3.1.3 i napotkał następujący problem:Odejmij wartość od każdej liczby na liście w Pythonie?

Jak usunąć wartość z grupy numerów?

# A list with a group of values 
a = [49, 51, 53, 56] 

Jak mogę odjąć 13 od każdej liczby całkowitej w liście?

# Attempting to minus 13 from this list - FAIL! 
(a[:] = a[:] - 13) 

Odpowiedz

70

Zrozumienie listy.

a[:] = [x - 13 for x in a] 
+0

Dzięki, dobrą pracę. :) Jak szybko umieścić to w funkcji? – Josh

+1

Umieszczając 'def minus13 (a):' na linii powyżej i wcinając jeden poziom. –

+4

Dlaczego 'a [:]' na lhs zamiast tylko przypisanie z powrotem do 'a'? Czy 'a [:]' nie tworzy kopii listy? – istruble

2

to będzie działać:

for i in range(len(a)): 
    a[i] -= 13 
+2

Rozwiązanie do rozumienia listy jest znacznie bardziej pythonic. Możesz ich polubić. http://docs.python.org/tutorial/datastructures.html#list-comprehensions – istruble

+0

dziękuję @istruble;) –

+0

Kto usunął mój komentarz? - Nie widzę sensu w zliczaniu długości a. Aby wykonać proste obliczenia. – Josh

31

Jeśli pracujesz z numerami dużo, warto przyjrzeć NumPy. Pozwala wykonywać wszystkie operacje bezpośrednio na tablicach numerycznych. Na przykład:

>>> import numpy 
>>> array = numpy.array([49, 51, 53, 56]) 
>>> array - 13 
array([36, 38, 40, 43]) 
+0

Dzięki, będę o tym pamiętać. Spróbuję najpierw przemyśleć Pythona, a potem przyjrzę się temu w przyszłości. Będę robił wiele edycji XML w tej chwili, w pracy niestety :). Ale chciałbym bardziej wydajnie programować. Pomoże to w edycji XML. – Josh

8

Można użyć map() funkcję:

a = list(map(lambda x: x - 13, a)) 
+1

Po co tworzyć listę map, jeśli mapa zwraca już listę? –

+2

@ Frost.baka W Pythonie 3 mapa zwraca obiekt mapy. W Pythonie 2 zwraca listę. – sputnikus

+0

dziwaczne ... ale stąd nazwa "mapa" :) –

Powiązane problemy