【问题标题】:split string into 2 lists python [closed]将字符串拆分为2个列表python [关闭]
【发布时间】:2019-02-16 22:11:06
【问题描述】:

分割字符串

1.) a,b:i,c,d:i,e,f,g,h

所以,下面是拆分的工作方式:

  • 如果:i 存在,那么:i 之前的任何东西都将作为一个项目转到colon_i_list,如果不存在:i,那么它将转到non_colon_i_list

for eg-> :i 出现在a,b 的末尾;因此,a,b 将进入colon_i_list,c,d 也将进入列表colon_i_list,因为 :i 也出现在 c、d 的末尾,e,f,g,h 将进入列表non_colon_i_list

colon_i_list = ['a,b','c,d']

non_colon_i_list = ['e,f,g,h']

2.) a,b,c,d

这里没有 :i。

non_colon_i_list = ['a,b,c,d']

3.) a,b,c,d,e,f:i

colon_i_list = ['a,b,c,d,e,f']

【问题讨论】:

  • 我认为您可能需要更改输入以进行澄清
  • 您的第一个示例包含两次:i,那里的逻辑是什么?此外,:i_list 不是有效标识符。
  • 查看编辑,是的,第一个示例包含 2 :i's 这意味着 :i's 之前的任何内容都进入冒号列表,所以第一次出现 a,b 并因此进入 Colon_list 然后 c,d 出现在之前:我所以它也进入了colon_list
  • 但是c, d也在第一个:i之后,那么你会考虑哪个?
  • 每当 :i 在 :i 之前遇到任何东西时,都会作为一项进入冒号列表。所以首先 :i 在 a,b 之后所以 a,b 将在之后先出现 :i 在 c,d 之后它将进入冒号列表

标签: python string python-2.7 list


【解决方案1】:

如果我猜对了,一个简单的split 将大有帮助:

>>> s = 'a,b:i,c,d:i,e,f,g,h'
>>> tokens = s.split(':i')
>>> col, noncol = tokens[:-1], tokens[-1:]
>>> col
['a,b', ',c,d']
>>> noncol
[',e,f,g,h']

在情况 3 中,未指定的“其他”列表将包含单个空字符串。

【讨论】:

  • 最好使用s.split(':i,') 和逗号来去掉结果中的逗号。
  • @Cornholio 否,因为如果您的 :i 是最后一个元素,它将不起作用(参见案例 3)
  • 好的,没错!但这不是 OP 所要求的。
  • 更好的分割方法是 tokens = [x.strip(",") for x in s.split(':i')] 以避免逗号的事情
【解决方案2】:

不过,这可能会解决您的问题,

z="a,b:i,c,d:i,e,f,g,h"
p=z.count(':i')
x=z.split(":i")
non_colon_i_list=x[p:]
colon_i_list=x[:p]

【讨论】:

    【解决方案3】:

    解决此问题的一种方法是首先通过拆分“:i”来创建一个列表。

    ":i" 比 ":i" 更可取,因为这会导致第一个(和其他)示例出现问题,因为您会得到如下内容: ["a,b", ",c,d" ( !! - 逗号提前)

    lst = string.split(":i,")
    

    然后:

    col = lst[:-1]
    non_col = lst[-1]
    

    这是可行的,因为最后一个元素之前的所有内容都必须被标记分割,因此属于 col。您需要注意的唯一一点是,如果字符串的最后一个元素是 ":i",则在字符串中添加一个逗号,以便令牌正常工作。

    【讨论】:

      【解决方案4】:
      a = 'a,b:i,c,d:i,e,f,g,h'
      colon_i_list, non_colon_i_list = a.rsplit(':i,',1)
      colon_i_list = colon_i_list.split(':i,')
      

      【讨论】:

        【解决方案5】:
        string1 = "a,b:i,c,d:i,e,f,g,h"
        string2 = "a,b,c,d"
        string3 = "a,b,c,d,e,f:i"
        
        def print_strange_rule(string):
            str_list = string.split(",")
            colon_i_list = []
            non_colon_i_list = []
        
            token = ""
            for piece in str_list:
                if ":i" not in piece:
                    token += piece + ","
                else:
                    colon_i_list.append(token + piece[:-2])
                    token = ""
            non_colon_i_list.append(token[:-1])
        
            print colon_i_list
            print non_colon_i_list
        
        print_strange_rule(string1)
        print_strange_rule(string2)
        print_strange_rule(string3)
        

        我认为我的答案是前两个答案中最差的......

        【讨论】:

          【解决方案6】:

          首先检查 ':i' 是否在你的字符串中:如果没有任何 :i,那么你可以去,所有的字符串都应该在 non_colon_i_list 中。但是,如果你的字符串中有一个 ':i',那么如果答案的长度为 1,那么用 ':i' 分割它,那么所有的字符串都应该在你的colon_i 列表中,否则除了最后一个之外的所有项目都在你的colon_i 列表,只有最后一个应该在 non_colon_i_list 中。见下面的代码:

          temp = 'a,b:i,c,d:i,e,f,g,h'
          non_colon_i_list = []
          colon_i_list = []
          if ':i' not in temp:
             non_colon_i_list.append(temp)
          else:
              splited = temp.split(':i')
              if len(splited) == 1:
                  colon_i_list.append(splited[0])
              else:
                  counter = 0
                  while counter<len(splited)-1:
                      colon_i_list.append(splited[counter])
                      counter += 1
                  non_colon_i_list.append(splited[-1])
          

          【讨论】:

            【解决方案7】:

            下面的代码删除了 case 3 中的空字符串,并删除了原始字符串中"-i" 后面的第一个逗号。

            str_list=['a,b:i,c,d:i,e,f,g,h','a,b,c,d',"a,b,c,d,e,f:i",""]
            for str_item in str_list:
                tokens=str_item.split(":i")
                colon_i_list=[x.lstrip(',') for x in tokens[:-1]]
                non_colon_i_list=[x.lstrip(',') for x in tokens[-1:] if x!=""]
                str_item,colon_i_list,non_colon_i_list
            

            输出:

             ('a,b:i,c,d:i,e,f,g,h', ['a,b', 'c,d'], ['e,f,g,h']) ('a,b,c,d', [], ['a,b,c,d']) ('a,b,c,d,e,f:i', ['a,b,c,d,e,f'], []) ('', [], [])
            

            【讨论】:

            • 输出:('a,b:i,c,d:i,e,f,g,h', ['a,b', 'c,d'], ['e ,f,g,h']) ('a,b,c,d', [], ['a,b,c,d']) ('a,b,c,d,e,f:i ', ['a,b,c,d,e,f'], []) ('', [], [])
            猜你喜欢
            • 2018-04-22
            • 2016-08-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-20
            • 2014-06-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多