Pergunta

Para matrizes e listas em Python e Numpy são as linhas seguinte equivalentes:

itemlist = []
for j in range(len(myarray)):
    item = myarray[j]
    itemlist.append(item)

e

itemlist = []
for item in myarray:
    itemlist.append(item)

Eu estou interessado no fim de ITEMLIST. Em alguns exemplos que eu tentei eles são idênticos, mas é garantida ? Por exemplo, eu sei que a declaração foreach em C # não ordena garantia, e que eu deveria ter cuidado com ele.

Foi útil?

Solução

É garantido para listas. Eu acho que o Python paralelo mais relevantes para o seu C exemplo # seria para iterar sobre as chaves em um dicionário, o que não é garantido para estar em qualquer ordem.

# Always prints 0-9 in order
a_list = [0,1,2,3,4,5,6,7,8,9]
for x in a_list:
    print x

# May or may not print 0-9 in order. Implementation dependent.
a_dict = {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}
for x in a_dict:
    print x

A estrutura for <element> in <iterable> única teme que os suprimentos iterable uma função next() que retorna algo. Não há nenhuma garantia geral de que estes elementos se voltou em qualquer ordem sobre o domínio da declaração for..in; listas são um caso especial.

Outras dicas

Sim, é totalmente garantida. for item in myarray (onde myarray é um sequência , que inclui matrizes de numpy, incorporado listas, array.arrays do Python, etc, etc), é na verdade equivalente em Python para:

_aux = 0
while _aux < len(myarray):
  item = myarray[_aux]
  ...etc...

para alguma variável _aux fantasma ;-). Btw, ambas as construções também são equivalentes a

itemlist = list(myarray)

Sim, a Python Language Reference garante este (a ênfase é minha) :

 for_stmt ::=  "for" target_list "in" expression_list ":" suite
               ["else" ":" suite]

"O conjunto é então executada uma vez para cada item fornecido pelo iterator, na ordem de ascendente índices . "

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top