python - 交换列表中的多个项目
问题描述
我想交换列表中的项目,但有两个词('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”“充电器”
解决方案
这是一个不太优雅的解决方案。首先确定充电器的位置。一旦看到去,将每个项目与充电器位置交换
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']
推荐阅读
- java - 当用户按下返回时,需要每个片段返回主屏幕(应用程序中没有任何按钮)
- postgresql - 如何创建基于行子集递增的列?
- python - pathlib 的 Path("NUL:").resolve() 在 windows 上抛出错误。这是一个错误吗?
- python - 将 Numpy 实现为 n 的 nth 阶乘
- json - 在Delphi中解析包含另一个jsonstring的字符串数组的JSON字符串
- flutter - 如何使饼图具有交互性?没有得到charts_flutter的饼图onChangedListener回调
- node.js - 通过 child_process 使用脚本 + 屏幕
- javascript - 什么时候手动重定位 Vue 渲染的 DOM 节点是安全的(如果有的话)?
- boto3 - Amazon Rekognition Video 没有检测到特定的人,但其他人都可以正常工作
- tensorflow - TensorFlow V1 的未来是什么?