Поскольку в фильтрах есть только 4 элемента, limit(10)
никогда не достигает 10 элементов, поэтому конвейер Stream продолжает генерировать новые элементы и подавать их в фильтр, пытаясь достичь 10 элементов, которые проходят фильтр, но поскольку только первые 4 элемента пропускают фильтр, обработка никогда не заканчивается (по крайней мере до переполнения i
).
Конвейер Stream не достаточно умен, чтобы знать, что больше элементов не может пройти фильтр, поэтому он сохраняет обработка новых элементов.
Если вы действительно хотите создать их на лету, вы можете назначить dict, который возвращается либо globals (), либо locals () в зависимости от того, какое пространство имен вы хотите создать в них:
globals()['somevar'] = 'someval'
print somevar # prints 'someval'
Но я бы не рекомендовал это делать. В общем, избегайте глобальных переменных. Использование locals () часто просто скрывает то, что вы на самом деле делаете. Вместо этого создайте свой собственный dict и назначьте его.
mydict = {}
mydict['somevar'] = 'someval'
print mydict['somevar']
Изучите python zen; запустите это и запомните его:
>>> import this
бит длинный, он работает, я думаю ...
prices = [5, 12, 45]
names = []
for i, _ in enumerate(prices):
names.append("price"+str(i+1))
dict = {}
for name, price in zip(names, prices):
dict[name] = price
for item in dict:
print(item, "=", dict[item])
Еще один пример, который действительно является вариантом другого ответа , поскольку он также использует словарь:
>>> vr={}
... for num in range(1,4):
... vr[str(num)] = 5 + num
...
>>> print vr["3"]
8
>>>
vr
, хотя? ваше решение побеждает всю цель. я очищаю данные из Интернета, с которыми мне нужно создавать экземпляры класса для каждого элемента контейнера, а количество элементов контейнера неизвестно ... как в вопросе 2 в этот поток, который я создал
– Anthony
29 June 2018 в 00:48
У меня возникла ваша проблема, и вот мой ответ:
prices = [5, 12, 45]
list=['1','2','3']
for i in range(1,3):
vars()["prices"+list[0]]=prices[0]
print ("prices[i]=" +prices[i])
, поэтому при печати:
price1 = 5
price2 = 12
price3 = 45
vars()["prices"+str(i)]
и иметь переменную с ожидаемым именем.
– tripleee
30 January 2018 в 07:04