在列表中移动项目若干个位置
我正在尝试用Python做一个简单的纸牌游戏。
我需要能够把我手中的任何一张牌在列表中向左移动1个或3个位置。如果移动到的位置上已经有一张牌,并且那张牌的数字或花色和我移动的牌相同,那么我就需要把它替换掉。
这是我到目前为止尝试的:
假设MN是我指定要移动的空间数。
假设MC是我指定要移动的那张牌。
假设Hand是我手中当前的牌的列表。
if MN == '1':
Hand.replace(Hand[Hand.index(MC) - int(1)], MC)
if MN == '3':
Hand.replace(Hand[Hand.index(MC) - int(3)], MC)
所以基本上我需要弄明白如何在我的牌列表(Hand)中,把指定的牌(MC)移动正确的空间数(MN)。
如果我的Hand看起来像这样:
[ JC, 4C, 7D, KS, 3S]
那么我应该能够把3S向左移动1个位置,并且用它替换掉KS,因为它们的花色是相同的。
[ JC, 4C, 7D, 3S]
提前谢谢你的帮助。
2 个回答
0
我会使用列表的切片表示法:http://docs.python.org/tutorial/introduction.html#lists
比如说,你有一个这样的列表:
l = [1, 2, 3, 4, 5, 6, 7, 8]
如果你想把元素 4
移动一个位置,你可以这样做:
index = 3
value = 4
spaces = 1
target = index - spaces
length = len(l)
# don't replace the element
l[0:target] + [value] + l[target:index] + l[index+1:length]
# results in [1, 2, 4, 3, 5, 6, 7, 8]
# do replace the element
l[0:target] + [value] + l[target+1:index] + l[index+1:length]
# results in [1, 2, 4, 5, 6, 7, 8]
通过提取参数 index
、value
、spaces
和 target
,这个方法足够通用,可以提取成一个好用的函数。试着用其他的值(不仅仅是1或3)。如果 spaces
的值太大,结果会是原来的列表。
如果你想把元素向右移动而不是向左,你需要稍微修改一下表达式,但思路是一样的。
3
在列表中移动一个项目,通常是指把它从原来的位置拿出来,然后放到想要的位置。很遗憾,你的问题没有提供足够的信息来了解你的 Hand 和 Card 类是怎样的。不过,如果 Hand 只是一个简单的列表,那么下面的代码应该可以解决你的问题:
HI = Hand.index(MC)
if (MN == '1') or (MN == '3'):
Hand[HI - int(MN)] = MC
Hand.pop(HI)
请注意,这里没有比较数字和花色,因为信息不够。