Случайный выбор, тянущий весь список, вместо отдельных элементов - PullRequest
0 голосов
/ 16 марта 2012

Я (постоянно) работаю над проектом с gmail и imaplib. Я ищу в gmail электронные письма, содержащие определенное слово, и получаю список уникальных идентификаторов (большая часть моего кода основана на / принадлежит Дагу Хеллману из его превосходного учебника по imaplib ). Эти уникальные идентификаторы сохраняются в списке. Я пытаюсь получить один идентификатор из списка, но random.choice продолжает тянуть весь список. Вот код:

import imaplib
import random
from imaplib_list_parse import parse_list_response

c = imaplib_connect.open_connection()
msg_ids = []
c.select('[Gmail]/Chats', readonly=True)
typ, msg_ids = c.search(None, '(BODY "friend")')
random_id = random.choice(msg_ids)
print random_id

В интерпретаторе я запутался, и msg_ids - это определенно список. Я также пытался извлечь определенные элементы массива (например, msg_ids [1] и т. Д.), Но там написано «IndexError: список индексов вне диапазона», что, как я понимаю, означает «то, что вы ищете, там нет» , что сбивает с толку, потому что это там.

Есть ли когда-нибудь список, а не список? Или что-то? Я не совсем понимаю.

Как всегда, я ценю любые отзывы, которые могут дать замечательные люди из stackoverflow:)

1 Ответ

1 голос
/ 16 марта 2012

Я думаю, что random_id - это список списка, что-то вроде: [[1,2,3,5]] oТак, когда вы звоните msg_ids[1], он поднимает IndexError.А поскольку в списке только один элемент, random.choice() всегда возвращает элемент.Вы можете попробовать:

print random.choice(msg_ids[0])

Для отладки такого рода вещей вы можете попробовать распечатать random_id или использовать IPython для интерактивного ввода кода, чтобы определить проблему.

...