我有一个像这样的元组列表:
x = [("a","b","c"), ("d","e","f"), ("g","h","i"), ("j","k","l")]
,我想从每个索引中删除第一个元素,如下:
x = [("b","c"), ("e","f"), ("h","i"), ("k","l")]
我试过使用pop.x
和remove.x
这样不工作。我想是因为列表有不能改变的元组?:
for i in result:
i.pop(0)
所以我试图将元组列表转换为使用zip
函数的列表,但我得到一个错误:
AttributeError: type object 'zip' has no attribute 'result'
知道我做错了什么吗?
感谢所有有用的答案!有很多方法可以解决我遇到的其他问题=D
python中的元组是不可更改的对象。你可以在里面存储任何你想要的东西,但是一旦它被声明了,你就不能把它改回来了。
这里有一个指向元组的链接:https://docs.python.org/3/tutorial/datastructures.html#tuples-and-sequences(第5.3节)
pop
函数从列表中删除最后一个元素并返回它。由于您的列表中有元组,因此在元组列表中调用pop
函数只会返回并删除列表中的最后一个元组。
元组是不可变的,所以你不能改变它们。但是,您可以使用新元组列表覆盖您的列表:
x = [('a','b','c'), ('d','e','f'), ('g','h','i'), ('j','k','l')]
x = [tpl[1:] for tpl in x]
输出:
[('b', 'c'), ('e', 'f'), ('h', 'i'), ('k', 'l')]
正如您所发现的,元组是不可变的,因此您必须创建一个包含不包含
项的元组的新列表new_list = []
for i in result:
new_list.append(i[1:])
或将列表项替换为它们的索引
for idx, tup in enumerate(x):
x[idx] = tup[1:]
或作为列表推导式
[i[1:] for i in result]
x = [('a','b','c'), ('d','e','f'), ('g','h','i'), ('j','k','l')]
y = []
for t in x:
y.append(tuple(list(t)[1:]))
print(y)
输出[('b', 'c'), ('e', 'f'), ('h', 'i'), ('k', 'l')]