首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python字符串操作列表

Python字符串操作列表
EN

Stack Overflow用户
提问于 2018-08-19 00:01:37
回答 4查看 1.7K关注 0票数 3

考虑列表'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)

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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)))
票数 0
EN

Stack Overflow用户

发布于 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)
票数 0
EN

Stack Overflow用户

发布于 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51910372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档