Python 将相似元素从一个列表移动到另一个列表

Python 将相似元素从一个列表移动到另一个列表,python,list,element,Python,List,Element,简而言之,我试图检测列表中是否有一种元素中的4个,然后将所有4个元素移动到另一个列表中。到目前为止,我已经: human_hand = [4,5,6,4,5,3,4,5,4] discard = [] for i in set(human_hand): if human_hand.count(i) == 4: discard.append(i) print discard 然而,我的问题是,一旦第一个被追加,布尔值就不再被触发。对python来说是个新手,而且很

简而言之,我试图检测列表中是否有一种元素中的4个,然后将所有4个元素移动到另一个列表中。到目前为止,我已经:

human_hand = [4,5,6,4,5,3,4,5,4]
discard = [] 


for i in set(human_hand):
    if human_hand.count(i) == 4:
        discard.append(i)

print discard

然而,我的问题是,一旦第一个被追加,布尔值就不再被触发。对python来说是个新手,而且很难理解。我也意识到我现在没有其他的说法

您正在迭代一个
集合

集合对象不允许有多个项目,因此如果您有列表
[4,5,6,4,5,3,4,5,4]
,则生成的集合将是
[3,4,5,6]
。 然后迭代
[3,4,5,6]
,因此它只会进入
if
语句一次:仅当
i==4

我不知道您打算在那里做什么,但如果您希望将
human_hand
中的所有四个元素附加到
discard
中,一种更简单的方法是不在集合上迭代:

for i in human_hand:
    if human_hand.count(i) == 4:
        discard.append(i)
编辑 如果要追加4次do
discard
列表,但如果没有4次,则只需通知用户一次,您可以使用:

for i in set(human_hand):
    if human_hand.count(i) == 4:
        discard.extend([i]*4)
    else:
        print "There aren't 4 of a kind for the number ", i

这会将列表添加到丢弃列表
[4,4,4,4]
,但如果没有其他4个数字项,则只需注意一次。

当调用集合中的i(人手)时,您正在对集合进行迭代,因此每个数字只表示一次。如果您想在原始版本中每次出现4时都追加,只需在手动i上迭代

Ok cool。这让我更亲近了。但是,如果我添加一个else语句,并沿着“younothave4ofa-kind”这一行,它将触发每个我没有4ofa-kind的值。所以,现在我有我所有的4在“放弃”,但它也打印“没有4的一种”5倍。我应该在我的else声明中添加什么?我想要的是,如果有4个相同类型的值,那么我想要附加这些值,如果没有,那么我想要else语句触发。我不应该执行for循环,然后只执行IF语句吗?问题是,我不想让它说,如果每个数都有4个相同类型的值。我只是想看看我的名单。看看我有没有4个不同的元素。如果有,那么我想附加这4个类型来丢弃。如果没有,那么我希望它继续阅读下面的代码。这可能有助于了解我正在通过编写Go Fish纸牌游戏来练习编程。然后只需删除
else
部分,代码就会完全满足您的要求!:)令人惊叹的。非常感谢。我的印象是,每个if语句都必须有一个else语句。