2013-09-12 2 views
0

Рассмотрим этот список:Почему я получаю NONE в списке?

test = ["stas", "doug", "saman", "movie"] 
for q in range(len(test)): 
    PreGroup = None 
    if (q > 0): 
     PreGroup = test[q-1] 
    print PreGroup 

Как я могу избавиться от NONE? как первый выход? Мне нужно установить q-1 или, по крайней мере, я думаю, потому что мне нужно, чтобы PreGroup был одним индексом перед потоком.

my PreGroup не должен иметь None, так как я передаю его позже в моем коде, и если он получает NONE, я получаю сообщение об ошибке.

Спасибо.

+0

Вы могли бы получить более полезные советы, если вы объяснить контекст, почему вы хотите это сделать. – Stuart

ответ

1

range начинается в 0, поэтому первый раз через испытание if (q > 0) терпит неудачу, и PreGroup остается на None.

В качестве примечания стороны вам не нужны скобки вокруг теста if.

-2

Может быть что-то вроде этого

test = ["stas", "doug", "saman", "movie"] 
for q in test: 
    PreGroup = None 
    q = test.index(q) 
    if q > 0: 
     PreGroup = test[q] 
    print PreGroup 
+0

Этот код по-прежнему будет печатать None на первой итерации. Кроме того, теперь он будет вести себя по-другому, поскольку он будет печатать текущий объект на каждой итерации (отличной от первой), а не предыдущей. И вы увеличили время работы от линейного до квадратичного, используя 'index'. – sepp2k

1

Вы не хотите, чтобы установить PreGroup (на что-то другое, чем None), если q является 0. Это хорошо, но тогда вы напечатаете значение PreGroup было ли оно установлен или нет. Если вы положите print внутри if, он будет напечатан, только если PreGroup установлено на test[q-1]. Затем вы также можете удалить линию PreGroup = None, потому что PreGroup не должен существовать за пределами if.

Даже лучший способ решить вашу проблему - просто начать цикл с 1 вместо 0. Таким образом, вам не нужно даже проверять, является ли q равно 0. Вы можете сделать это, используя range(1, len(test)) ,

1

Вы не очень четко заявляете, что именно вы хотите, но я полагаю, что вы говорите, что вы хотите как действительную текущую группу test[q], так и действительную предыдущую группу test[q-1] на каждой итерации цикла. В этом случае вы можете использовать range(1, len(test)), чтобы сделать q начинающимся с 1, а не 0.

В качестве альтернативы, вы можете сделать это без использования какого-либо индекса с этим циклом:

for (pre_group, group) in zip(test, test[1:]): 
    print pre_group, group 
Смежные вопросы