2024-04-27 03:40:50 发布
网友
对于字符串abcdefg和列表[1, 1, 0, 0, 1, 1, 0],返回字符串中与列表中1 (on)匹配的所有字符的Pythonic方法是什么?你知道吗
abcdefg
[1, 1, 0, 0, 1, 1, 0]
1 (on)
所需输出为:
['a', 'b', 'e', 'f']
谢谢!你知道吗
编辑:
还有一个问题,是否可以对ab和ef进行分组,使输出看起来像这样:['ab', 'ef']?其基本思想是对由0分隔的字符进行分组。如果没有0,那么它将是['abcdefg']。谢谢!你知道吗
ab
ef
['ab', 'ef']
0
['abcdefg']
三种解决方案:
s = 'abcdefg' li = [1, 1, 0, 0, 1, 1, 0] print [c for i,c in enumerate(s) if li[i]] print [s[i] for i,b in enumerate(li) if b] it = iter(li) print [c for c in s if it.next()]
我比较喜欢的是带有iter()的:没有zip,没有枚举,没有itertool
[x[0] for x in zip("abcdefg", [1, 1, 0, 0, 1, 1, 0]) if x[1]]
为此,可以使用itertools.compress
>>> from itertools import compress >>> list(compress("abcdefg", [1, 1, 0, 0, 1, 1, 0])) ['a', 'b', 'e', 'f']
如果不想导入任何模块,也可以使用
>>> [e for e, i in zip("abcdefg", [1, 1, 0, 0, 1, 1, 0]) if i] ['a', 'b', 'e', 'f']
根据您的最新要求
>>> from itertools import groupby >>> st = "abcdefghijklm" >>> some_list = [1,1,0,0,0,1,1,1,0,0,0,1,0] >>> it_l = iter(some_list) >>> [''.join(v) for k, v in groupby(st, key = lambda e:next(it_l)) if k] ['ab', 'fgh', 'l']
或者更好
>>> [''.join(zip(*v)[-1]) for k, v in groupby(zip(some_list, st), key = itemgetter(0)) if k] ['ab', 'fgh', 'l']
三种解决方案:
我比较喜欢的是带有iter()的:没有zip,没有枚举,没有itertool
为此,可以使用itertools.compress
如果不想导入任何模块,也可以使用
根据您的最新要求
或者更好
相关问题 更多 >
编程相关推荐