【问题标题】:How to add substrings within a list of strings following a certain condition?如何在特定条件下在字符串列表中添加子字符串?
【发布时间】:2020-04-14 01:54:37
【问题描述】:

假设我有一个这样的字符串列表:

['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:]

【问题讨论】:

  • 这被标记为python-2.7 - 您是否专门在 Python 2 中寻找解决方案?
  • 我目前使用的是Python 2.7,但是Python 3的解决方案也可以。
  • 请注意,Python 2 将在 9 天内停止支持。 pythonclock.org
  • @kaya3 那我真的应该改掉我的坏习惯了:(

标签: python string python-2.7 loops boolean-algebra


【解决方案1】:
re.sub('\B', '*', s)

演示:

>>> lst = ['001+11', '010+10', '011+01', '100+11']
>>> [re.sub('\B', '*', s) for s in lst]
['0*0*1+1*1', '0*1*0+1*0', '0*1*1+0*1', '1*0*0+1*1']

【讨论】:

    【解决方案2】:

    我喜欢 kaya3 的解决方案,但这是另一个,使用正则表达式:

    >>> import re
    >>> [re.sub(r'(\d)(?=\d)', r'\1*', s) for s in out]
    ['0*0*1+1*1', '0*1*0+1*0', '0*1*1+0*1', '1*0*0+1*1']
    

    【讨论】:

      【解决方案3】:

      这是一个使用列表理解的单行代码,joinsplit 完成工作:

      >>> 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']
      

      【讨论】:

      • 哇!没想到这么容易。谢谢-- 5 分钟后接受答复。
      • '+'.join(map('*'.join, s.split('+')))。数学家不习惯传递函数吗? :-P 无论如何,还是比我的长得多。
      猜你喜欢
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      相关资源
      最近更新 更多