2009-10-15 4 views
0

Я пытаюсь выполнить итерацию по списку и взять каждую часть списка, закодировать его и присоединиться к результату, когда все будет сделано. В качестве примера у меня есть строка, которая создает список, каждый из которых имеет длину 16 символов.Итерация через список в Python

message = (u'sixteen-letters.sixteen-letters.sixteen-letters.sixteen-letters.') 
result = split16(message, 16) 
msg = ';'.join(encode(result.pop(0)) for i in result) 

Функция кодирования принимает 16-байтовую строку и возвращает результат. Однако с тем, как он написан, он кодирует только половину элементов в списке.

Если я пытаюсь понимание:

result = [encode(split16(message, 16) for message in list_of_messages)] 
result = ''.join(result) 

Это приводит весь список, посылаемый сразу. Что мне нужно сделать, так это отправить каждый элемент в функцию кодирования отдельно, получить результат, а затем объединить их.

Есть ли простой способ достичь этого?

+0

Ваше понимание в синтаксическом выражении неверно – SilentGhost

+0

Спасибо SilentGhost, проверили ваш код и отлично работали. – rescue

+0

@rescue: Не комментируйте свой вопрос. Пожалуйста, исправьте свой вопрос, чтобы иметь правильный код. –

ответ

1

Вы пытаетесь сделать что-то подобное?

';'.join(encode(i) for i in message.split('.')) 

, конечно, это может быть просто

';'.join(encode(i) for i in result) 

если ваша split16 функция достаточно сложна.

0

Я не совсем понятно, что вы после этого, но

msg=";".join(map(encode,(message[i:i+16] for i in range(0,len(message),16)))) 
1

Я немного запутался о том, что вы точно пытаетесь сделать, что усугубляется недостающий Paren в коде вы публикуемую:

result = [encode(split16(message, 16) for message in list_of_messages] 

Если это будет:

result = [encode(split16(message, 16) for message in list_of_messages)] 

или:

result = [encode(split16(message, 16)) for message in list_of_messages] 

Я думаю, что второй сделает то, что вы хотите.

Этот код:

msg = ';'.join(encode(result.pop(0)) for i in result) 

терпит неудачу, потому что на каждом шагу вы переборе result, но сокращая его на каждом шагу pop. Это должно быть просто:

msg = ';'.join(encode(i) for i in result) 
Смежные вопросы