首页 > 解决方案 > Python 字符串操作列表

问题描述

考虑列表 ['010','10','00'] ;我正在尝试识别包含字符“1”的索引位置。这里,预期的结果是 [0,1],因为元素 1,'010' 在索引 1 处包含 '1',而元素 2,'10' 在索引 0 处包含'1'。

sample = ['010','10','00']
result = set()
for e in sample:
   for i,c in enumerate(list(e)):
       if c == '1':
           result.add(i)

有没有更有效的解决方案?

标签: pythonlist-comprehension

解决方案


您可以使用该str.find()方法更有效地查找字符串中子字符串的索引。并且由于在给定字符串中找不到子字符串时str.find()返回,因此您可以在之后从结果集中删除:-1-1

print(set(s.find('1') for s in sample) - {-1})

这输出:

{0, 1}

编辑:如果要查找字符串中子字符串的所有索引,则可以re.finditer改用,并将结果集与functools.reduce

import re
from functools import reduce
print(reduce(set.union, ({m.start() for m in re.finditer('1', s)} for s in sample)))

推荐阅读