Python字符串操作列表
考虑一下列表['010'、'10'、'00'];我试图识别包含字符“1”的索引位置。这里,预期结果是[0,1],因为元素1,'010'在索引1处包含'1',元素2,'10'在索引0处包含'1'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) 有没有更有效的解决方案 那么
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。