2015-04-06 43 views
0

我在删除/替换字符串的每个第n,第m和第i个字符时会出错吗?删除/替换字符串中的每个第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

你看到的输出是正确的。你为什么期待其他输出呢? – BrenBarn

+0

输出对我来说是正确的;指数9,18和27(9的倍数)以及10,20和30(10的倍数)和11和22(11的倍数)被取出。 –

回答

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**' 
+0

有些东西在你身上不见了,如果我假设? –

+0

我给的代码适用于我。它给出了你发布的预期结果。 –

+0

对,我忘了删除任何()。它工作正常。谢谢! –

相关问题