我想从字符串列表中删除变量(这是一个字符串)。所以基本上:
list = ["A", "G", "T", "C"]
number = 2
newlist = ["A", "G", "T", "C"] - list[number]
然后应该给出:
newlist = ["A", "G", "C"]
但是当我尝试这个时它会给我这个错误信息:
Traceback (most recent call last):
File "mini.py", line 3, in <module>
newlist = ["A", "G", "T", "C"] - list[number]
TypeError: unsupported operand type(s) for -: 'list' and 'str'
我该如何解决这个问题?
提前致谢!
答案 0 :(得分:1)
有几种方法可以做你想做的事。
如果要修改起始列表(而不是创建新列表),可以使用del
语句删除所需的索引:
del oldlist[index]
如果您需要引用正在删除的值(并且尚未删除),则可以在列表中调用pop
:
value_removed = oldlist.pop(index)
如果要保留旧列表,则需要复制列表的数据,以便能够在不更改原始列表的情况下删除该值。一种方法是复制整个列表,然后在副本中的索引上使用del
:
newlist = oldlist.copy() # or list(oldlist) or oldlist[:]
del newlist[index]
另一种选择是使用切片来获取索引之前的列表部分,以及索引之后的部分,然后将它们连接在一起。这看起来像这样:
newlist = oldlist[:index]
newlist.extend(oldlist[index + 1:])
您可以使用+
运算符在一行中执行后一版本以合并两个切片,但使用两行并调用extend
可避免第一片值的不必要的额外副本。 / p>
请注意,除非index
始终接近列表末尾,否则所有这些方法都需要O(len(oldlist))
时间才能完成,所以不要经常这么做列表,如果你关心表现。
在我的所有示例中,我都使用oldlist
作为现有列表的名称。我强烈建议您避免在代码中使用list
作为变量名,因为它会掩盖内置list
类型。这通常不会立即成为问题(特别是如果list
变量是函数中的局部变量),但如果稍后编辑代码并且不记得{{1},则可能会导致非常混乱的错误在那个特定的地方是一个局部变量。