Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据给定的格式将字符串划分为列表_Python - Fatal编程技术网

Python 根据给定的格式将字符串划分为列表

Python 根据给定的格式将字符串划分为列表,python,Python,我有一个字符串,像“SAB\u bARGS\u D”。我想要的是,字符串被划分为字符列表,但只要有一个uu符号,下一个字符就会附加到上一个字符 所以上面的答案应该是['S','A','B_B','A','R','G','S_D'] 它可以通过使用for循环遍历列表来完成,但是是否有一个内置函数可以使用 非常感谢 更新 大家好 多亏了罗伯特·罗斯尼,aaronasterling,我得到了所需的答案,但我有一个完全相似的问题,我只想在这里问。。。。。。假设现在我的字符串有一个标准,它可以有一个字母

我有一个字符串,像
“SAB\u bARGS\u D”
。我想要的是,字符串被划分为字符列表,但只要有一个uu符号,下一个字符就会附加到上一个字符

所以上面的答案应该是
['S','A','B_B','A','R','G','S_D']

它可以通过使用for循环遍历列表来完成,但是是否有一个内置函数可以使用

非常感谢


更新

大家好


多亏了罗伯特·罗斯尼,
aaronasterling
,我得到了所需的答案,但我有一个完全相似的问题,我只想在这里问。。。。。。假设现在我的字符串有一个标准,它可以有一个字母或一个字母后跟u和一个数字。。。。。现在我如何将字符串拆分为列表。。。。。。建议的解决方案现在无法使用,因为S_10将被分为S_1和0。。。。。。如果有人能告诉我们如何使用RE来实现这一点,那将是很有帮助的。。。。非常感谢

我可能会对循环使用

def a_split(inp_string):
    res = []
    if not inp_string: return res  # allows us to assume the string is nonempty

    # This avoids taking res[-1] when res is empty if the string starts with _
    # and simplifies the loop.
    inp = iter(inp_string)   
    last = next(inp)
    res.append(last)

    for c in inp:
        if '_' in (c, last): # might want to use (c == '_' or last == '_')
            res[-1] += c
        else:
            res.append(c)
        last = c
    return res
通过将
res.append
存储在局部变量中并直接引用该变量而不是引用局部变量,
res
然后执行属性查找以获得
append
方法,您将能够获得一些性能增益


如果存在类似于
'a_b_c'
的字符串,则不会拆分该字符串。本例中未指定任何行为,但修改它以执行其他操作并不困难。另外,类似于
“ab”
的字符串将拆分为
[''u a',b']
,类似地,对于
“ab”
,我知道,我将使用正则表达式:

>>> import re
>>> pattern = "[^_]_[^_]|[^_]"
>>> re.findall(pattern, "SAB_bARGS_D", re.IGNORECASE)
['S', 'A', 'B_b', 'A', 'R', 'G', 'S_D']

模式尝试匹配一行中的3个字符-非下划线、下划线、非下划线-如果不匹配,则尝试匹配非下划线字符。

使用正则表达式

>>> import re
>>> s="SAB_bARGS_D"
>>> re.findall("(.(?:_.)?)",s)
['S', 'A', 'B_b', 'A', 'R', 'G', 'S_D']

我认为
for
循环在这里是最佳的。列表理解解决方案基本上必须至少通过两次,并且可读性差。有人能证明它可以使用for循环完成吗?“SAB_b_ARGS_D”这个输入可能吗?不可能。。。。。没有一封信在两边都加上你的回答是我想要的。。。。但是我有一个问题要问。。。。就复杂性而言,使用re是否比下面给出的for循环建议更好???如中所述,我不知道重复使用什么来检查模式,因此与使用普通循环相比,它是否会导致性能下降。。。。。这是一个普遍的疑问,不仅仅是在这个搜索中……如果你使用
timeit
,你会发现在这种情况下使用
re.findall
比使用下面的函数稍微快一点——如此之小,以至于我会冒险猜测两者在复杂性上是相同的。嗯,处理的复杂性。代码复杂性是另一个问题。另外,对于后续问题,请使用模式[a-z].[0-9]+|[a-z]