首页 > 解决方案 > 交换列表中的多个项目

问题描述

我想交换列表中的项目,但有两个词('go','chargers')总是交换并来举个例子:

>lst = ['hello', 'go', 'hi', 'chargers']
>lst = ['hello', 'go', 'chargers', 'hi']

我可以使用列表分配:

lst[2], lst[3] = lst[2], lst[3]

但概括它,它是如何工作的,例如

['hello', 'go', 'sun', 'chargers', 'good', 'go', 'can', 'chargers']
['hello', 'go', 'chargers','sun', 'good', 'go', 'chargers', 'can']

我将如何配对所有“go”“充电器”

标签: pythonlist

解决方案


这是一个不太优雅的解决方案。首先确定充电器的位置。一旦看到去,将每个项目与充电器位置交换

lst = ['hello', 'go', 'go', 'chargers', 'good', 'sun', 'can', 'chargers']
index = 1
# loop opposite to make array, later pop them to get increasing order of sequence
allChargerIndex = [len(lst)-i-1 for i,val in enumerate(lst[::-1]) if val=="chargers"]
while index < len(lst):
    if lst[index-1] == "go":
        chargerIndex = allChargerIndex.pop()
        lst[index], lst[chargerIndex] = lst[chargerIndex], lst[index]
    index += 1
print(lst)

当然,您可以将其包含在一个函数中并尝试多种情况

def swapGoAndChargers(lst):
   index = 1
   # loop opposite to make array, later pop them to get increasing order of sequence
   allChargerIndex = [len(lst)-i-1 for i,val in enumerate(lst[::-1]) if val=="chargers"]
   while index < len(lst):
        if lst[index-1] == "go":
            chargerIndex = allChargerIndex.pop()
            lst[index], lst[chargerIndex] = lst[chargerIndex], lst[index]
        index += 1
   return lst

print(swapGoAndChargers(['hello', 'go', 'go', 'chargers', 'good', 'sun', 'can', 'chargers']))
#['hello', 'go', 'chargers', 'go', 'chargers', 'sun', 'can', 'good']
print(swapGoAndChargers(['hello', 'go', 'sun', 'chargers', 'good', 'go', 'can', 'chargers']))
#['hello', 'go', 'chargers', 'sun', 'good', 'go', 'chargers', 'can']
print(swapGoAndChargers(['go', 'hello', 'sun', 'go', 'good', 'chargers', 'can', 'chargers']))
#['go', 'chargers', 'sun', 'go', 'chargers', 'hello', 'can', 'good']

推荐阅读