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]