从列表中删除特定项目但在python中保留一些项目

时间:2017-06-20 15:56:44

标签: python list

我有一个大型数据集,在使用re.finditer函数查找某个特定字符的所有实例后会生成一个列表。此处显示的示例列表:

[41, 64, 87, 105, 713, 736, 759, 777, 1385, 1408, 1431, 1449, 2057, 2080, 2103, 2121, 2729, 2752, 2775, 2793,...]

我需要删除除第4项以外的所有项目。所以我需要删除索引41,64和87但不是105的字符。删除713,736和759但不删除777等。

我在Mac OS 10.12上使用python。

更新:

所以现在我有了这个新列表a=[105,777,1449,2121,2793],我希望将已导入的文本文件的索引替换为变量。我可以这么做:

for idx, item in enumerate(a):
     raw_text[item] = "new character/string"

3 个答案:

答案 0 :(得分:8)

根据您的描述,您希望删除除第四个元素以外的所有元素。您可以使用切片运算符执行此操作:

data[3::4]

此处 3 起始索引,因为我们感兴趣的第一个索引位于3 4 表示我们采用跳数4

这会产生:

>>> data[3::4]
[105, 777, 1449, 2121, 2793]

如果您使用可迭代(不是列表,元组,...),您可以使用itertools.islice

from itertools import islice

islice(data,3,None,4)

此处None在语义上用作停止索引。由于我们不想停留在某个索引处,因此我们使用None。这将生成:

>>> list(islice(data,3,None,4))
[105, 777, 1449, 2121, 2793]

答案 1 :(得分:1)

a = [41, 64, 87, 105, 713, 736, 759,
     777, 1385, 1408, 1431, 1449, 2057, 
     2080, 2103, 2121, 2729, 2752, 2775, 2793]

b = a[3::4]
print(b)

# Output:
# [105, 777, 1449, 2121, 2793]

答案 2 :(得分:0)

它有点不同但是如果你开始反向索引,那么它会给你相同的

In [29]: s = d[::-4]

In [30]: s
Out[30]: [2793, 2121, 1449, 777, 105]

In [31]: s.reverse()

In [32]: s
Out[32]: [105, 777, 1449, 2121, 2793]