删除/替换字符串中的每个第n,第m和第i个字符我做错了什么?
''.join('*' if any(i % n == 0 for n in [9, 10, 11])
else char for i, char in enumerate(string))
有关:
string = "100000000111000000001110000000011"
它返回:
*00000000***000000*0*1*0000*00*11
而不是:
*00000000***00000000***00000000**
答案 0 :(得分:6)
为什么期待*00000000***00000000***00000000**
?每个第9,第10和第11个角色都是:
9th: 0, 9, 18...
10th: 0, 10, 20...
11th: 0, 11, 22...
Combined: 0, 9, 10, 11, 18, 20, 22...
对于提供的字符串,实际上*00000000***000000*0*1*0000*00*11
。根据您的预期结果,看起来您实际上想要它做的是屏蔽掉每11个字符的第1个,第10个和第11个字符(索引0,9和10) 。试试这个:
>>> ''.join('*' if i % 11 in [0, 9, 10]
... else char for i, char in enumerate(string))
'*00000000***00000000***00000000**'