Python 如何删除元组中元素的第一个实例?
例如,我有一个元组:Python 如何删除元组中元素的第一个实例?,python,python-3.x,tuples,Python,Python 3.x,Tuples,例如,我有一个元组: (7, 5, 3, 3, 6, 3, 9) 我只想去掉元组中的第一个数字3,这样它就会变成这样: (7, 5, 3, 6, 3, 9) 我编写的代码使用筛选工具删除3,但它也删除了所有其他3: def takeOut(k, r): newK = tuple(filter(lambda x: x != r, k)) return newK print(takeOut((7, 5, 3, 3, 6, 3, 9), 3)) 这并不像人们想象的那么简单,原因
(7, 5, 3, 3, 6, 3, 9)
我只想去掉元组中的第一个数字3,这样它就会变成这样:
(7, 5, 3, 6, 3, 9)
我编写的代码使用筛选工具删除3,但它也删除了所有其他3:
def takeOut(k, r):
newK = tuple(filter(lambda x: x != r, k))
return newK
print(takeOut((7, 5, 3, 3, 6, 3, 9), 3))
这并不像人们想象的那么简单,原因是元组是不可变的 一种简单的方法是转换为
列表
,使用删除
删除第一个实例,然后转换回元组:
t = (7, 5, 3, 3, 6, 3, 9)
t2 = list(t)
t2.remove(3)
tuple(t2)
# (7, 5, 3, 6, 3, 9)
作为一项功能:
def takeOut(k, r):
k2 = list(k)
k2.remove(r)
return tuple(k2)
takeOut((7, 5, 3, 3, 6, 3, 9), 3)
# (7, 5, 3, 6, 3, 9)
元组是不可变的,这实际上不是从元组中“删除对象” 当您删除它时,您将创建一个新的元组。 可能有数百种方法可以解决这个问题
def takeOut(k, r):
first = True
newK = []
for item in k:
if first and item == r:
first = False
continue
newK.append(item)
return tuple(newK)
print(takeOut((7, 5, 3, 3, 6, 3, 9), 3))
您可以利用
index
仅返回元素的第一个索引这一事实,并将生成器表达式转换回元组:
>>> tuple(e for i, e in enumerate(k) if i != k.index(3))
(7, 5, 3, 6, 3, 9)
我会选择切片:
def remove_element(seq, element):
try:
index = seq.index(element)
return seq[:index] + seq[index + 1:]
except ValueError: # element doesn't exist
return seq
在Python中,最快也是最简单的方法是尽可能使用任何内置方法。在这种情况下,这将是元组(序列)方法(有关详细信息,请参阅文档中的):
在这种情况下,这样做意味着函数也可以使用
list
s,因为它们也是序列。我有完全相同的解决方案。我正在检查是否有更快的一个通用解决方案,它将删除所有相似的对,只是第一次出现。。。
def remove_first_inst(seq, elem):
try:
i = seq.index(elem)
except ValueError:
return seq # elem was not in sequence.
return seq[:i] + seq[i+1:]
t = (7, 5, 3, 3, 6, 3, 9)
print(remove_first_inst(t, 3)) # -> (7, 5, 3, 6, 3, 9)