【问题标题】:Divide string into pairs [duplicate]将字符串分成对[重复]
【发布时间】:2021-01-16 01:46:23
【问题描述】:

我想将文本分成两对。

  • 输入text = "abcde"

  • 目标输出result = ["ab", "cd", "e_"]

  • 电流输出result = ['ab', 'abcd']

我当前的代码如下所示。但我不知道我现在是怎么做到的。有人给我小费吗?

def split_pairs(text):
    result = []
    if text is None or not text:
        return []
    pair = ""
    for i in range(len(text)):
        if i % 2 == 0:
            pair += text[i]
            pair += text[i+1]
        else:
            result.append(pair)
    return result

【问题讨论】:

  • 尝试使用range(0, len(text), 2) 并删除if/else 条件。 range 中的第三个参数是步长。

标签: python string list split


【解决方案1】:

这里的问题是“pair”变量永远不会重新初始化为“”。 确保在 else 块中将其设为空字符串。

def split_pairs(text):
    result = []
    if text is None or not text:
        return []
    pair = ""
    for i in range(len(text)):
        if i % 2 == 0:
            pair += text[i]
            pair += text[i+1]
        else:
            result.append(pair)
            pair = ""  # Make sure you reset it
    return result

如果你想在末尾有一个“_”(如果是奇数个字符),你可以这样做:

def split_pairs(text):
    result = []
    if text is None or not text:
        return []
    pair = "__"  # Setting pair to "__" by default
    for i in range(len(text)):
        if i % 2 == 0:
            pair[0] = text[i]
            if i < len(text):  # Avoiding overflow
                pair[1] = text[i+1]
        else:
            result.append(pair)
            pair = "__"  # Make sure you reset it
    if pair != "__":  # Last bit 
        result.append(pair)
    return result

【讨论】:

    【解决方案2】:

    如果您的代码需要采用您最初编写的格式,我不是,但我编写了以下代码来完成工作。

    def split_pairs(text):
        if len(text) % 2 == 0:
            result = [text[i:i+2] for i in range(0, len(text), 2)]
        else:
            result = [text[i:i+2] for i in range(0, len(text), 2)]
            result[-1]+="_"
        return result
    

    【讨论】:

      【解决方案3】:

      您还可以对带有第三个step 参数的range 使用列表推导,并添加ljust 以添加_。这不仅适用于配对:

      >>> s = "abcde"
      >>> k = 2
      >>> [s[i:i+k].ljust(k, "_") for i in range(0, len(s), k)]
      ['ab', 'cd', 'e_']
      

      【讨论】:

        【解决方案4】:

        一旦附加到“结果”,你应该重置你的“对”变量

        def split_pairs(text):
        result = []
        if text is None or not text:
            return []
        pair = ""
        for i in range(len(text)):
            if i % 2 == 0:
                pair += text[i]
                pair += text[i+1]
            else:
                result.append(pair)
                pair = ""
        return result
        

        【讨论】:

          【解决方案5】:

          您可以使用列表推导将偶数与相应的奇数压缩在一起。如果使用itertools.zip_longest,您可以使用fillvalue 参数在长度不匹配时提供“填充”。

          >>> from itertools import zip_longest
          >>> s = 'abcde'
          >>> pairs = [i+j for i,j in zip_longest(s[::2], s[1::2], fillvalue='_')]
          >>> pairs
          ['ab', 'cd', 'e_']
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-10-23
            • 1970-01-01
            • 2023-04-04
            • 2016-07-31
            • 2017-10-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多