リスト内包表記に一度に 2 つの項目を追加したいと考えています。1項目は一定です。リスト内包表記内の for ループを 1 つだけ使用し、追加の関数を使用せずにこれを実現するにはどうすればよいでしょうか。インポートを使用しない回答が優先されます。
以下をご覧ください。
>>> mystring = 'ABCELKJSDLHFWEHSJDHFKHIUEHFSDF'
>>> sum([['^', char] for char in mystring.lower()], [])
['^', 'a', '^', 'b', '^', 'c', '^', 'e', '^', 'l', '^', 'k', '^', 'j', '^', 's', '^', 'd', '^', 'l', '^', 'h', '^', 'f', '^', 'w', '^', 'e', '^', 'h', '^', 's', '^', 'j', '^', 'd', '^', 'h', '^', 'f', '^', 'k', '^', 'h', '^', 'i', '^', 'u', '^', 'e', '^', 'h', '^', 'f', '^', 's', '^', 'd', '^', 'f']
^
小文字の各文字の前に文字を追加してリストを作成しようとしています。sum
この例では、リストを平坦化するために を使用する必要があります。しかし、私の質問は、そもそもフラットなリストを作成できるかどうかです。上記の出力は、目的の出力です。
のように、ループの反復ごとに変化する変数の前に何かを常に追加します。ここでは単純すぎるため、for
2 つのループを使用することはできません。たとえば、次のようになります。for
mystring = 'ABCELKJSDLHFWEHSJDHFKHIUEHFSDF'
print [item for x in mystring.lower() for item in ['^', x]]
次のようなことをすると:
>>> mystring = 'ABCELKJSDLHFWEHSJDHFKHIUEHFSDF'
>>> [['^', x] for x in mystring]
['^', 'a', '^', 'b', '^', 'c', '^', 'e', '^', 'l', '^', 'k', '^', 'j', '^', 's', '^', 'd', '^', 'l', '^', 'h', '^', 'f', '^', 'w', '^', 'e', '^', 'h', '^', 's', '^', 'j', '^', 'd', '^', 'h', '^', 'f', '^', 'k', '^', 'h', '^', 'i', '^', 'u', '^', 'e', '^', 'h', '^', 'f', '^', 's', '^', 'd', '^', 'f']
リスト内のリストを取得します。したがって、ループの追加や追加の関数を使用せずに、リスト内包表記で一度に 2 つの項目を追加できる方法はありますsum
か? これは非常に単純なことですが、それを行う方法が見つからないので、私はこれを尋ねます。次のことをしようとすると:
>>> ['^', x for x in mystring.lower()]
File "<console>", line 1
['^', x for x in mystring.lower()]
^
SyntaxError: invalid syntax
試行はSyntaxError
. では、私が求めていることは Python では不可能ですか? を使用()
すると、タプルのリストが表示されます。
/演算子も使用してみました:splat
unpacking
>>> [*['^', x] for x in mystring.lower()]
File "<console>", line 1
[*['^', x] for x in mystring.lower()]
^
SyntaxError: invalid syntax
しかし、上記のように、これも構文エラーです。この遅い編集で申し訳ありませんが、次のことを試しました。
import itertools
mystring = "HELLOWORLD"
print(list(itertools.chain.from_iterable(('^', x) for x in mystring.lower())))
ただし、上記ではまだインポートが必要でした。