我有一个大型数据集,在使用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"
答案 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]