python - 如何在满足特定条件的字符串列表中添加子字符串?
问题描述
假设我有一个这样的字符串列表:
['001+11', '010+10', '011+01', '100+11']
我想得到这个:
['0*0*1+1*1', '0*1*0+1*0', '0*1*1+0*1', '1*0*0+1*1']
我知道这里的条件是,只要有 0 或 1,我们必须用数字+“*”替换数字,但当数字的下一个元素是“+”时不要这样做。所以我写了一个 python 代码如下-
binary=["0","1"]
for string in out:#out is the list of strings
for i in range(len(string)):
if string[i] in binary:
out[out.index(string)]=change(string,string[i],string[i]+"*")
break
print out
这使输出为-
['0*01+01', '0*00+01', '0*11+00', '0*10+00', '1*01+11', '1*00+11', '1*11+10', '1*10+10']
所以,我意识到如果我再运行一个“while循环”,我会得到我想要的(一个while循环,因为我们必须提到“for循环”中的循环重复次数,这里不是一个选择)。但是我无法弄清楚while的条件应该是什么。很多这一切听起来有点复杂,所以我想,也许还有其他方法可以实现我想要的东西。因此,问题。
注意——这是一个更大的程序的一部分,用于从任何不是用 Python 格式编写的布尔表达式中获取真值表。如果这部分得到解决,其余的可能可以使用 eval 来解决。提前致谢!
EDIT1--change 是一个用户定义的函数,它改变一个更大字符串的子字符串。
def change(string,old,new):
pos=string.index(old)
return string[:pos]+new+string[pos+1:]
解决方案
这是一个使用列表理解的单行代码,join
并split
完成工作:
>>> lst = ['001+11', '010+10', '011+01', '100+11']
>>> [ '+'.join('*'.join(x) for x in s.split('+')) for s in lst ]
['0*0*1+1*1', '0*1*0+1*0', '0*1*1+0*1', '1*0*0+1*1']
推荐阅读
- spring-boot - Spring-Boot 具有无法识别的 hibernate.hbm2ddl.auto 值:NONE 不在 application.properties 中
- jetty - Jetty HttpClient v11.x 中的 URI 模板支持
- python - Pandas:新列中与前行差异的最大值列表
- ios - 自我调整 UICollectionView `reloadItems(at: IndexSet)` 将在其他部分单元格上调用 `cellForItemAt`
- dart - 为什么属性需要 Dart 中非语法糖初始值设定项的默认值?
- javascript - 不同的javascript方法中的不同正则表达式行为
- flutter - Flame 如何支持 Rive 动画?
- html - 为美国观众使用适当的语言子标签
- php - 如何通过改变捐赠总额来减少现金分配总额
- jenkins-plugins - jenkins 自定义插件 java 代码从从机读取文件