Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python字符串操作列表_Python_List Comprehension - Fatal编程技术网

Python字符串操作列表

Python字符串操作列表,python,list-comprehension,Python,List Comprehension,考虑一下列表['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) 有没有更有效的解决方案 那么

考虑一下列表['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)
有没有更有效的解决方案

那么:

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

您可以使用
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)))

你的答案看起来很好。您是想获得set()还是列表[]

假设你想得到一个列表,我稍微修改了你的代码。 看看这个

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)
好的,再来一次:

sample = ['010','10','00']
result = set()
for e in sample:
   i = e.find('1')
   if i != -1:
       result.add(i)

这是处理python列表的常用方法

my_list = ['100','300','1001','000','000']
my_list = [x.find('1') for x in my_list if '1' in x]

print(my_list)
>> [0, 0]

编辑:更新代码以获取列表元素中的索引1,而不是列表元素中包含1的索引。

对我来说似乎很合理,但我不确定是否使用
set()
set()
是合适的。她不在乎
1
是否在给定位置出现两次、三次或十次。以获得唯一索引。即使列表是['010','01',结果也应该是(1)。我们是否可以使用列表理解来实现这一点?@JohnGordon除了使用集合而没有解释之外,问题中还暗示了什么?对于
['010','00','10']
,输出应该是什么?或者这保证不会发生?因为这是列表的索引,而不是字符串中
1
的位置。我想她想要单个项目中
1
的位置,而不是包含
1
的任何项目的位置。i、 e.第一项是
010
,因此第二个位置是
1
。是的,我在单个列表元素中寻找1的位置。这太棒了。非常感谢。find()只返回第一次出现的内容,例如“110”。find('1')只返回0。我正在寻找一个可以返回结果{0,1}的函数。我已经用一个解决方案更新了我的答案,该解决方案将以字符串形式返回所有出现的
'1'
的索引。这不起作用。OP正在尝试索引列表中字符串中的字符,而不是列表元素您完全正确@roganjosh。我刚刚更新了代码以打印列表元素中的索引1。