Всегда ли 'for x in array' приводит к отсортированному x?[В Python/NumPy И Обратно]

StackOverflow https://stackoverflow.com/questions/1236695

  •  11-09-2019
  •  | 
  •  

Вопрос

Для массивов и списков в Python и Numpy эквивалентны следующие строки:

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

и:

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

Я заинтересован в порядок из списка элементов.В нескольких примерах, которые я пробовал, они идентичны, но так ли это гарантированный?Например, я знаю, что foreach оператор в C # не гарантирует порядок, и я должен быть осторожен с ним.

Это было полезно?

Решение

Это гарантировано для списков.Я думаю, что более уместной параллелью Python вашему примеру с C # было бы перебирать ключи в словаре, которые НЕ обязательно должны быть в каком-либо порядке.

# 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

В for <element> in <iterable> структура беспокоится только о том, что iterable поставляет a next() функция, которая возвращает что-то.Нет никакой общей гарантии, что эти элементы будут возвращены в любом порядке по домену for..in заявление;списки - это особый случай.

Другие советы

Да, это полностью гарантировано. for item in myarray (где myarray является последовательность, который включает массивы numpy, встроенные списки, Python's array.arrays и т.д. и т.п.), Фактически эквивалентен в Python:

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

для некоторой фантомной переменной _aux;-).Кстати, обе ваши конструкции также эквивалентны

itemlist = list(myarray)

Да, тот Ссылка на язык Python гарантирует это (курсив мой):

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

"Тогда люкс выполняется один раз для каждого элемента предусмотрено итератор, в порядке возрастания индексов."

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top