0

リストを繰り返し処理し、リストの各部分を取得してエンコードし、すべて完了したら結果を結合しようとしています。例として、各要素の長さが 16 文字のリストを生成する文字列があります。

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)

リスト全体が一度に送信されます。私がする必要があるのは、各要素をエンコード関数に個別に送信し、結果を取得してからそれらを結合することです。

これを達成する簡単な方法はありますか?

4

3 に答える 3

1

このようなことをしようとしていますか?

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

もちろんそれはただのことかもしれません

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

split16関数が十分に複雑な場合。

于 2009-10-15T11:06:53.323 に答える
1

あなたがまさにやろうとしていることについて少し混乱しています。これは、投稿したコードに括弧がないことによって悪化しています。

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]  

2番目はあなたが望むことをすると思います。

このコード:

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

resultすべてのステップで を反復処理しているが、 を使用してすべてのステップで短縮しているため、失敗していpopます。次のようにする必要があります。

msg = ';'.join(encode(i) for i in result)
于 2009-10-15T11:17:42.017 に答える
0

あなたが何を求めているのかはよくわかりませんが、

msg=";".join(map(encode,(message[i:i+16] for i in range(0,len(message),16))))
于 2009-10-15T11:16:54.573 に答える