我想在 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
我想在 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
您不能使用切片表示法将列表切片成任意块。对于一般情况,您最好的选择可能是使用索引列表来构建列表理解。
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])
您打算执行的不是切片而是选择。
我能想到的最接近的可能性是使用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))