考虑列表'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)
有没有更有效的解决方案?
发布于 2018-08-19 00:12:56
可以使用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)))
发布于 2018-08-19 00:06:38
这样如何:
sample = ['010','10','00']
result = set()
for i,e in enumerate(sample):
if '1' in e:
result.add(i)
发布于 2018-08-19 00:15:35
你的答案看起来很不错。您是否打算获得一个set()或list[]?
假设您想要获取一个列表,我对您的代码做了一些修改。看看这个。
sample = ['010','10','00']
result = list()
for e in sample:
for i,c in enumerate(list(e)):
if c == '1':
result.append(i)
print(result)
https://stackoverflow.com/questions/51910372
复制相似问题