Python 如何删除元组中的项?

Python 如何删除元组中的项?,python,list,tuples,Python,List,Tuples,我知道元组是不可变的。因此,我尝试先将元组转换为列表,然后删除该项 我的原始元组是('monkey','camel',('python','elephant','penguin'))。这是一个包含另一个元组的元组。我想删除'python' 首先,我定义了一个flatte()函数(我在论坛上找到): 然后定义删除函数: def tuple_without(original_tuple,item_remove): lst=flatten(list(original_tuple)) # c

我知道元组是不可变的。因此,我尝试先将元组转换为列表,然后删除该项

我的原始元组是
('monkey','camel',('python','elephant','penguin'))
。这是一个包含另一个元组的元组。我想删除
'python'

首先,我定义了一个flatte()函数(我在论坛上找到):

然后定义删除函数:

def tuple_without(original_tuple,item_remove):
    lst=flatten(list(original_tuple))  #  convert the original tuple to list and flatten it
    return list(x for x in lst if x !=item_remove)

print(tuple_without(new_zoo,'python'))
它工作正常,结果如下所示:

['monkey', 'camel', 'elephant', 'penguin']

我想知道这里是否有更好、更具python风格的解决方案。

您可以创建一个递归函数,如下所示

def removeItem(myTuple, item):
     myList = list(myTuple)
     for index, value in enumerate(myList):
         if isinstance(value, tuple):
             myList[index] = removeItem(value, item)
         if value==item:
             del myList[index]
     return myList
这只是在元组中循环,将其转换为列表,在查找另一个嵌套元组时重新调用自身并删除找到的项。这也保持了嵌套结构,无需展平

另外,我刚刚注意到您上面的代码实际上并没有使用
list(original\u tuple)
list中的新列表。相反,它只是被展平,然后使用具有展平元组(现在是生成器)内容的元组理解生成一个新元组。因此,在您的示例中,列表的内容从未被编辑过(只是为了澄清一下)


因此,在行
lst=flatte(list(original_tuple))
中,您不需要list函数。

此代码可以为您完成以下工作:

def exclude_words(the_tuple, exclude=[]):

    new_list = []

    for value in the_tuple:
        if type(value) == tuple:
            new_list.extend(exclude_words(value, exclude))
        elif not value in exclude:
            new_list.append(value)

    return new_list

在展平元组之前,无需将其转换为列表。由于此flatte()版本实际上是所有值的生成器,因此可以在生成器表达式中使用其结果:

def tuple_without(original_tuple,item_remove):
    return list(x for x in flatten(original_tuple) if x !=item_remove)

您也可以在此处删除
list()
调用;如果需要列表,则可以将其转换为调用此函数的列表,如果只需要在列表上循环,则可以使用返回的生成器表达式。

用于循环元组,并检查项是否为元组。如果该项不是元组,则将其附加到列表中。如果该项是一个元组,那么for将为所需项循环该元组,并将其附加到列表中,以列出从该元组中所需的内容

a = (1,2,(3,4))
b = [ ]

for x in a:
    if type(x) is tuple:
        for y in x:
            if y != 3:
                b.append(y)
    else:
        b.append(x)


print(b)
>>[1,2,4]

老派,但这很容易理解:-)。我只是更喜欢“没有价值”而不是“没有价值”。。。
a = (1,2,(3,4))
b = [ ]

for x in a:
    if type(x) is tuple:
        for y in x:
            if y != 3:
                b.append(y)
    else:
        b.append(x)


print(b)
>>[1,2,4]