3

Python 3.3 でリストをインデックスで文字列に結合したいと思います。相互にフォローしているアイテムに対してはできますが、インデックスのみでアクセスしたいと思います。

これは機能します:

list = ['A', 'B', 'C', 'D']
partList = "".join(list[1:3])
-> BC

しかし、どうすればこれを達成できますか(うまくいきません):

list = ['A', 'B', 'C', 'D']
partList = "".join(list[0,3])
-> AD
4

2 に答える 2

7

スライス表記を使用して、リストを任意のチャンクにスライスすることはできません。おそらく、一般的な場合の最善の策は、インデックスのリストを使用してリスト内包表記を構築することです。

mylist = ['A', 'B', 'C', 'D'] # the full list
indices = [0, 3] # the indices of myList that you want to extract

# Now build and join a new list comprehension using only those indices.
partList = "".join([e for i, e in enumerate(mylist) if i in indices])
print(partList) # >>> AD

DSMのコメントで指摘されているように、効率に関心があり、インデックスのリストが「フレンドリー」であることがわかっている場合 (つまり、カットしているリストに対して大きすぎるインデックスはありません) 、なしでより単純な式を使用できますenumerate

partList = "".join([mylist[i] for i in indices])
于 2013-10-24T18:07:07.250 に答える
1

あなたが実行しようとしているのは、スライスではなく選択です。

私が考えることができる最も近い可能性は、operator.itemgetterを使用することです

>>> from operator import itemgetter
>>> mylist = ['A', 'B', 'C', 'D']
>>> ''.join(itemgetter(0,3)(mylist))
'AD'

変数を使用する必要がある場合は、splat演算子を使用します

index = (0,3)
''.join(itemgetter(*index)(mylist))
于 2013-10-24T18:19:20.437 に答える