如何在Python中遍历列表并删除via index?

时间:2015-02-26 21:58:59

标签: python list search stack

我正在导入CSV文件并搜索每个元素以匹配正则表达式。如果为true,我想删除该元素。但我希望通过索引删除元素,而不是通过值删除元素,尤其是因为通过索引删除更快。

with open(file, "r", newline="") as fh:
    data = csv.reader(fh)
    s_data = sorted(data, key=operator.itemgetter(0))

    regex = re.compile("\D")

    # Search for any non-numeric characters in each index and discard the element, if found.
    for element in s_data:
        if regex.search(element[0]) is not None:
            pop(element) # <-- this is the problem

如何按索引删除匹配元素?

2 个答案:

答案 0 :(得分:2)

s_data.pop(s_data.index(element))
如果s_data中的每个元素都是唯一的,

将起作用。如果没有,你可以做

for index, element in enumerate(s_data):
        if regex.search(element[0]) is not None:
            s_data.pop(index)

答案 1 :(得分:2)

s_data = [e for e in s_data if regex.search(e[0]) is None]

在效率方面更好。

从您的代码中,我可以告诉您希望保留符合此标准的元素:

regex.search(e[0]) is None

如果您逐个删除元素,因为从列表中删除O(n),如果您多次删除,则对于大数据来说真的不会很快。

我提供的那个叫做列表理解。它是一种生成列表的python方式。它会创建一个新列表,而不是从原始列表中删除元素。列表理解更有可能以c级效率进行优化和执行。

功能风格的类似方式,但速度要慢一些:

s_data = filter(lambda e: regex.search(e[0]) is None, s_data)