use*_*952 4 python list duplicates
我有一个像这样的字符串列表:
['**', 'foo', '*', 'bar', 'bar', '**', '**', 'baz']
Run Code Online (Sandbox Code Playgroud)
我想'**', '**'
用一个替换'**'
,但'bar', 'bar'
保持完整.即用一个连续替换任何连续数字'**'
.我当前的代码如下所示:
p = ['**', 'foo', '*', 'bar', 'bar', '**', '**', 'baz']
np = [p[0]]
for pi in range(1,len(p)):
if p[pi] == '**' and np[-1] == '**':
continue
np.append(p[pi])
Run Code Online (Sandbox Code Playgroud)
有没有更多的pythonic方式来做到这一点?
不确定pythonic,但这应该工作,更简洁:
star_list = ['**', 'foo', '*', 'bar', 'bar', '**', '**', 'baz']
star_list = [i for i, next_i in zip(star_list, star_list[1:] + [None])
if (i, next_i) != ('**', '**')]
Run Code Online (Sandbox Code Playgroud)
以上复制列表两次; 如果你想避免这种情况,请考虑Tom Zych的方法.或者,您可以执行以下操作:
from itertools import islice, izip, chain
star_list = ['**', 'foo', '*', 'bar', 'bar', '**', '**', 'baz']
sl_shift = chain(islice(star_list, 1, None), [None])
star_list = [i for i, next_i in izip(star_list, sl_shift)
if (i, next_i) != ('**', '**')]
Run Code Online (Sandbox Code Playgroud)
这可以推广并使迭代器更友好 - 更不用说更具可读性 - 使用文档中的pairwise
配方变体itertools
:
from itertools import islice, izip, chain, tee
def compress(seq, x):
seq, shift = tee(seq)
shift = chain(islice(shift, 1, None), (object(),))
return (i for i, j in izip(seq, shift) if (i, j) != (x, x))
Run Code Online (Sandbox Code Playgroud)
测试:
>>> list(compress(star_list, '**'))
['**', 'foo', '*', 'bar', 'bar', '**', 'baz']
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1817 次 |
最近记录: |