イテラブルがあるとします:
var = "ABCDEF"
次のようにイテラブルを取得します。
it = itertools.combinations(var,2)
次のようなイテラブルのすべての値を出力する単一の関数はありますか
printall(it)
for
ループを使用するのではなく?
これはむしろ、あなたが望むものに依存します.すべての値を出力したい場合は、それらを計算する必要があります-イテラブルは、すべての値が要求されるまで値が計算されることを保証しません。したがって、これを達成する最も簡単な方法はリスト:
print(list(iterable))
これにより、適切な通常のリスト形式で項目が出力されます。各項目を新しい行に配置したい場合は、前述のように、単純な for ループが最適なオプションです。
for item in iterable:
print(item)
データを特定の形式にする必要はなく、読み取り可能にする必要がある場合 (たとえば、すべてを 1 行にまとめる必要はない) は、モジュールをチェックアウトすることをお勧めしpprint
ます。
私が本当に最適だとは思わないが、完全を期すために言及する最後のオプションは、print()
機能が非常に柔軟な3.xで可能です。
print(*iterable, sep="\n")
ここでは、 iterableを引数としてアンパックしprint()
、セパレーターを (通常のスペースではなく) 改行にします。
メソッドを使用してstr.join
、イテラブルの各要素を新しい行に結合できます。
print('\n'.join(it))
各要素を好きなようにフォーマットできるフォーマットを使用できます。
>>> print '\n'.join('{:>10}'.format(e) for e in iter([1,2,'1','2',{1:'1'}]))
1
2
1
2
{1: '1'}
各要素は必ずしも文字列である必要はありませんが、__repr__
文字列でない場合はメソッドが必要です。
その後、必要な関数を簡単に作成できます。
>>> def printall(it,w): print '\n'.join('{:>{w}}'.format(e,w=w) for e in it)
>>> printall([1,2,'3','4',{5:'6'}],10)
1
2
3
4
{5: '6'}
私はリストを使用していますが、反復可能なものであれば何でもかまいません。
itertools のchain()関数を使用して var データのイテレータを作成し、イテレータの * 演算子を使用してアンパックすることができます
>>> from itertools import chain
>>> var = 'ABCDEF'
>>> print(*chain(var))
A B C D E F
>>> print(*chain(var), sep='\n')
A
B
C
D
E
F
既存のデータを反復処理して再度出力する必要がある場合は、これにスター演算子 * を使用できます
>>> print(*var)
A B C D E F
>>> print(*var, sep='\n')
A
B
C
D
E
F