在列表中移动项目若干个位置

0 投票
2 回答
2429 浏览
提问于 2025-04-17 05:47

我正在尝试用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]

通过提取参数 indexvaluespacestarget,这个方法足够通用,可以提取成一个好用的函数。试着用其他的值(不仅仅是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)

请注意,这里没有比较数字和花色,因为信息不够。

撰写回答