Объект python grouper не смог распечатать ничего после использования itemgetter [duplicate]

Попробуйте использовать следующий код:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("URL");
JArray array = new JArray();
using (var twitpicResponse = (HttpWebResponse)request.GetResponse())
using (var reader = new StreamReader(twitpicResponse.GetResponseStream()))
{
    JavaScriptSerializer js = new JavaScriptSerializer();
    var objText = reader.ReadToEnd();

    JObject joResponse = JObject.Parse(objText);
    JObject result = (JObject)joResponse["result"];
    array = (JArray)result["Detail"];
    string statu = array[0]["dlrStat"].ToString();
}
26
задан JSchwartz 16 August 2014 в 04:42
поделиться

3 ответа

Это потому, что data - итератор, вы можете использовать итератор только один раз. Например:

lst = [1, 2, 3]
it = iter(lst)

next(it)
=> 1
next(it)
=> 2
next(it)
=> 3
next(it)
=> StopIteration

Если мы перемещаем некоторые данные с помощью цикла for, последний StopIteration приведет к его завершению в первый раз. Если мы снова попытаемся перебрать его , мы будем получать исключение StopIteration, потому что итератор уже был использован.

Теперь для второго вопроса: что делать, если нам do нужно переходить через итератор более одного раза? Простым решением было бы создать список с элементами, и мы можем проходить его столько раз, сколько необходимо. Это все в порядке, если в списке несколько элементов:

data = list(db[3])

Но если есть много элементов, лучше создать независимые итераторы, используя tee() :

import itertools
it1, it2 = itertools.tee(db[3], n=2) # create as many as needed

Теперь мы можем поочередно перебирать по очереди:

for e in it1:
    print("doing this one time")

for e in it2:
    print("doing this two times")
25
ответ дан Óscar López 26 August 2018 в 03:59
поделиться

Как только итератор исчерпан, он больше ничего не даст.

>>> it = iter([3, 1, 2])
>>> for x in it: print(x)
...
3
1
2
>>> for x in it: print(x)
...
>>>
9
ответ дан falsetru 26 August 2018 в 03:59
поделиться

Я хочу выполнить ответ @ ÓscarLópez для тех, кто ищет решение в 2017 году и использует python 2.7 или 3.

Метод tee () теперь не принимает аргументов ключевых слов и ждет второго аргумента целое число, а не ключевое слово. Это правильный способ использования tee ():

import itertools
it1, it2 = itertools.tee(db[3], 2)
2
ответ дан n.shalnov 26 August 2018 в 03:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: