koncepcyjnej, chcę zrobić:W python, w jaki sposób można jednocześnie ustawić wiele wartości z listy na zero?
arr[20:] = 0
gdzie arr
jest list
. Jak mogę to zrobić?
koncepcyjnej, chcę zrobić:W python, w jaki sposób można jednocześnie ustawić wiele wartości z listy na zero?
arr[20:] = 0
gdzie arr
jest list
. Jak mogę to zrobić?
Możesz to zrobić bezpośrednio, korzystając z przypisania plasterków.
arr[20:] = [0] * (len(arr) - 20)
Ale naturalnym sposobem jest po prostu powtórzenie.
for i in xrange(20, len(arr)):
arr[i] = 0
Co z 'arr [20:] = [0 dla i w zakresie (20, len (arr))] '? Czy nie powinno to być również w tej odpowiedzi? –
Ponieważ OP wie, że arr ma zawsze 10 000 pozycji, i zakładając, że jest to operacja, która będzie musiała być wykonana dość często, to może być pewna korzyść w obliczaniu "trailing_zeros = [0] * (10000-20)", a następnie po prostu robi 'arr [20:] = trailing_zeros' kiedy jest to potrzebne. – PaulMcG
Możesz utworzyć funkcję, która spowoduje przekazanie tablicy do tej wartości, która wyzeruje tablicę. Od jakiegoś czasu nie używam Pythona, więc nie będę próbował pokazać kodu Pythona. W tej funkcji można użyć pętli for
lub while
do iteracji każdej wartości i ustawienia każdej z nich równej zero.
Oto kilka opcji:
Lista rozumienie
>>> a = [1]*50
>>> a = [aa if i < 20 else 0 for i,aa in enumerate(a)]
>>> a
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Lista przypisanie plaster:
>>> a = [1]*50
>>> a[20:] = [0 for aa in a[20:]]
>>> a
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Zip (* zip):
>>> a = [1]*50
>>> a[20:] = zip(*zip(a[20:],itertools.repeat(0)))[1]
Nominuję przykład zip do włączenia do najczęściej zadawanych pytań w Pythonie. Gnarly! – Dave
Jeśli wykorzystaj zrozumienie listy y Tworzymy kopię listy, więc marnujemy pamięć. Użyj spisywania ze zrozumieniem lub tworzenia przekrojów, aby tworzyć nowe listy, a następnie użyj ich do poprawnego ustawienia elementów listy.
Yup. To lista, przepraszam. –
Byłoby miło, gdyby jakiekolwiek rozwiązanie, z którego korzystasz z wdziękiem, zajmowało się przypadkiem, w którym pierwotny rozmiar listy jest krótszy niż 20 sztuk. – PaulMcG
Cóż, zgrabne zachowanie, którego oczekiwałbym, to pozostawienie listy 20 lub mniej przedmiotów nietkniętych. Pętla 'xrange' robi to, jak sądzę, ponieważ nie ma wartości" i "do iteracji. Ale to nie ma znaczenia dla mojej aplikacji, ponieważ hackuję to razem i wiem, że zawsze mam 10 000 punktów danych. –