/ / python dla tablicy wyliczanej w pętli - python

python dla tablicy wyliczanej w pętli - python

def miniMaxSum(arr):
#
# Write your code here.
#
eArr = enumerate(arr)
maxNum = 0
indexMax = -1;
for a,b in eArr:
if b > maxNum:
maxNum = b
indexMax = a

for index,number in eArr:
print("hello")

dlaczego nic nie drukuje? Położyłem część hello, aby sprawdzić, czy iteracja przebiega przez drugą pętlę for.

Odpowiedzi:

5 dla odpowiedzi № 1

enumerate to jest iterator. Iteratory mogą być używane tylko raz; po tym są puste.

Łatwe (i idiomatyczne) rozwiązanie polega na stworzeniu nowego enumerate iterator dla każdej pętli:

def miniMaxSum(arr):
maxNum = 0
indexMax = -1;
for a,b in enumerate(arr):
if b > maxNum:
maxNum = b
indexMax = a

for index,number in enumerate(arr):
print("hello")

Jeśli chcesz użyć iteratora więcej niż raz, możesz zapisać go na liście, a następnie ponownie użyć. Po prostu zmień tę linię

eArr = enumerate(arr)

… do tego:

eArr = list(enumerate(arr))

W tym przypadku nie ma powodu, aby to zrobić. Po prostu marnujesz pamięć budującą listę. (Jeśli chodzi o szybkość, to prawdopodobnie jest trochę szybsza dla bardzo małych list, ale wolniejsza dla bardzo dużych - ale prawdopodobnie nie ma to znaczenia dla twojego kodu.) Ale są przypadki, w których jest to przydatne, więc warto wiedzieć, jak to zrobić.