これが私の現在のリストです:
x = [1.0, 0.0, 3.5, 1.2, 5.4]
そして、ここに私が欲しいものがあります:
newx = [1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
リストを小数点で分割するだけで、新しいリストに余分なゼロを追加したくありません。私はとても新しいので、私が知らない簡単な解決策があるはずです。
これが私の現在のリストです:
x = [1.0, 0.0, 3.5, 1.2, 5.4]
そして、ここに私が欲しいものがあります:
newx = [1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
リストを小数点で分割するだけで、新しいリストに余分なゼロを追加したくありません。私はとても新しいので、私が知らない簡単な解決策があるはずです。
x = [1.0, 0.0, 3.5, 1.2, 5.4]
newx = [int(j) for i in x for j in str(i).split('.')]
>>>[1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
ところで、理解はこれと同じように機能します:
var result = []
for i in x:
for j in str(i).split('.'):
result.append(int(j))
str.split()
これは、 と を使用して実行できますitertools.chain.from_iterable()
。
ジェネレータ式では、リスト内の各項目str()
を取得し、数値を取得して文字列にするために使用します。次に、その文字列を文字で分割します"."
。
(str(item).split(".") for item in x)
これにより、リストのジェネレーターが得られます ( ['1', '0'], ['0', '0'], ...
)。次に、それitertools.chain.from_iterable()
を 1 つのイテレータにフラット化するために使用します。
itertools.chain.from_iterable(...)
次に、リスト内包表記を使用して、個々の数字文字列を再度 int に変換します。
>>> import itertools
>>> x = [1.0, 0.0, 3.5, 1.2, 5.4]
>>> digit_strings = itertools.chain.from_iterable(str(item).split(".") for item in x)
>>> [int(item) for item in digit_strings]
[1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
itertools.chain.from_iterable()
は iterable をフラット化するための最良のツールです - 効率的で柔軟性があり、構文が明確です (stdlib の明確なドキュメントによる関数呼び出しのみ)。
>>> x = [1.0, 0.0, 3.5, 1.2, 5.4]
>>> y = [str(v).split(".") for v in x] # Will give list of list
>>> [int(v) for li in y for v in li] # Flatten the list
[1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
>>> x = [1.0, 0.0, 3.5, 1.2, 5.4]
>>> map(int, (k for y in map(str, x) for k in y.split('.')))
[1, 0, 0, 0, 3, 5, 1, 2, 5, 4]
[int(b) if b.isdigit() else b for a in x for b in str(a).split('.')]