2016-10-24 1 views
-1

最後の要素がなくても、すべての行を一緒に結合できます。zip iterator最後の要素がない行を結合する方法

zip()は、このストリームの最後の要素が欠けているようです。例えば

seq 0 70 | xargs -L 50 | sed 's/ /,/g'

入力:

seq 0 70 | python -c $'import sys\nfor x in zip(*[iter(sys.stdin)]*50): print(",".join(x).replace("\\n",""))\n' 

間違っ出力:ラインと最後のジップあたり

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49 

予想される50の項目は残りの部分を含んでいます

0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49 
50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69 

関連:多分

+1

最短の反復で 'zip'が停止します。 'izip_longest'を使用し、より短いiterablesのために' None'が埋め込まれているか( 'fillvalue'を渡して' None'を上書きする)、オプ​​ションがあります。しかし、よりよい選択肢は、より良いグルーパーレシピを使用することです。いくつかの変更を加えれば、これは助けになるかもしれません:http://stackoverflow.com/a/40063403/3125566 –

+0

@MosesKoledoyeそれはどのようにUNIXパイプ間で動作し、unixライナーとして機能しますか? – jmunsch

答えて

1
$'import sys,itertools\nfor x in itertools.izip_longest(*[iter(sys.stdin)]*50): print(",".join(x).replace("\\n",""))\n' 

?これはizip_longestを使って最後に余分な項目を落とさないようにします

+1

ありがとうございます。 xの中のyはxでなければなりません。そうでなければ 'expected string、NoneType found'が返されます。 – jmunsch

+1

' [yがyの場合はy ] 'は単に' list(x) 'とすることができます –

関連する問題