如何在Python中将多个项目从一个列表移动到另一个列表

Cod*_*tor 1 python indexing list

我想将一个以上的项目从一个列表移动到另一个列表.

list1 = ['2D','  ','  ','  ','  ','  ','  ','  ','  ']
list2 = ['XX','XX','5D','4S','3D','  ','  ','  ','  ']
list3 = ['XX','XX','XX','8C','7H','6C','  ','  ','  ']
Run Code Online (Sandbox Code Playgroud)

在上面的代码中' '是一个双重空间

我想能够移动'5D','4S','3D'list2'8C','7H','6C'list3.

我已经尝试了下面的代码,但它不起作用.

list1 = ['2D','  ','  ','  ','  ','  ','  ','  ','  ']
list2 = ['XX','XX','5D','4S','3D','  ','  ','  ','  ']
list3 = ['XX','XX','XX','8C','7H','6C','  ','  ','  ']


items_to_be_moved = list2[list2.index('XX')+2 : list2.index('  ')]

list3[list3.index('  ')] = items_to_be_moved
del list2[list2.index('XX')+2 : list2.index('  ')]

print('list2',list2)
print('list3',list3)
Run Code Online (Sandbox Code Playgroud)

这回来了

list2 ['XX', 'XX', '  ', '  ', '  ', '  ']
list3 ['XX', 'XX', 'XX', '8C', '7H', '6C', ['5D', '4S', '3D'], '  ', '  ']
Run Code Online (Sandbox Code Playgroud)

但是,我不想使用list2.index('XX')+2,我想使用一个代码,给出最后一个索引,'XX'就像list2.index(' ')给出第一个索引' '.

此外,我不希望移动的项目在另一个列表中的自己的单独列表中.例如:而不是返回

"list3 ['XX', 'XX', 'XX', '8C', '7H', '6C', ['5D', '4S', '3D'], '  ', '  ']"
Run Code Online (Sandbox Code Playgroud)

列表

"list3 ['XX', 'XX', 'XX', '8C', '7H', '6C','5D', '4S', '3D', '  ', '  ']"
Run Code Online (Sandbox Code Playgroud)

应该退还.

agf*_*agf 6

要替换正确的项目,请使用切片分配.

list1 = ['2D','  ','  ','  ','  ','  ','  ','  ','  ']
list2 = ['XX','XX','5D','4S','3D','  ','  ','  ','  ']
list3 = ['XX','XX','XX','8C','7H','6C','  ','  ','  ']

list3[3:6] = list2[2:5]

print list3
# ['XX', 'XX', 'XX', '5D', '4S', '3D', '  ', '  ', '  ']
Run Code Online (Sandbox Code Playgroud)

如果您想在最后一次连续之后开始'XX',您可以使用:

from itertools import takewhile
i = sum(1 for _ in takewhile(lambda elem: elem == 'XX', list3))

list3[i:i+3] = list2[i-1:i+2]
Run Code Online (Sandbox Code Playgroud)

找到最后一个的索引.