Python在列表之间传输对象

我有几个列表(牌组、手牌、操场、废纸堆),里面都是卡片对象。我如何才能将卡片从一个列表移动到另一个列表?
这就是我现在所拥有的:(它不能正常工作)

选择 | 换行 | 行号
  1. for i in range( len(hand)-1,0,-1):
  2.   if hand[i].isRed():
  3.     playfield.append(hand.pop(i))

我能用更顺畅的方式做这件事吗?
由于前面的代码没有执行我想要的操作,我现在使用以下代码:

选择 | 换行 | 行号
  1. i = 0
  2. while i<len(hand):
  3.     if hand[i].isRed() :
  4.         playfield.append(hand.pop(i))
  5.     else : 
  6.         i+=1
  7.  

这是最近的路吗?

# 回答1


在我看来,这相当有效(使用Append、POP方法)。
您可以考虑将其放入对象方法中,或者创建一个具有迭代器的Hand对象,或者在卡片对象本身的逻辑中包含有关卡片处于哪一手的一些细节。这取决于你真正想要达到的目标!
# 回答2


感谢您的回复!在删除一些对象时,我在迭代列表时遇到了麻烦……也许有一种更好的数据结构,它具有有序的元素,并允许根据卡片颜色等属性选择(和删除)对象?
# 回答3


有意思的。这是一个很常见的问题,我相信你们解决它的两种方法也很常见。您不能做的一件事(而且您明智地避免了这一点)是在您正在更改的列表上迭代。
另一种方法是使用带有掩码的数字数组,即对其进行矢量化。这意味着您当时要处理的是整个数组。所以你可能会得到这样的东西:

选择 | 换行 | 行号
  1. playfield.append(hand[hand.color=="Red"])
  2.  

并跳过整个循环过程。
或者,正如我所说的,也许操场和手可以成为卡片对象的属性,所以你会得到如下所示:

选择 | 换行 | 行号
  1. for c in card:
  2.     if c.color=="Red" and c.location=="hand":
  3.         c.location="playfield"

但这是一种完全不同的代码结构方式,所以我不知道它是否更容易!
但看起来你做得很好!

标签: python

添加新评论