【问题标题】:Python - split string into smaller chunks and assign a variablePython - 将字符串拆分成更小的块并分配一个变量
【发布时间】:2012-12-06 18:01:52
【问题描述】:

是否可以在 python 中拆分一个字符串并将每个拆分的部分分配给一个变量以供以后使用?如果可能的话,我希望能够按长度拆分,但我不确定使用 len() 将如何工作。

我试过了,但它没有得到我需要的东西:

x = 'this is a string'
x.split(' ', 1)
print x

结果: ['这个']

我想得到这样的结果:

a = 'this'
b = 'is'
c = 'a'
d = 'string'

【问题讨论】:

  • 为什么要将结果存储在单个项目列表中?
  • print x 不会打印您所说的打印内容。拆分的结果永远不会分配回x
  • 那将是一件非常奇怪的事情,稍后将使用这些变量以及它如何知道有多少。另一方面,您可以使用 dict 之类的东西来存储具有特定键的每个项目,尽管如果您要处理非常长的字符串,您仍然会遇到问题。但是,为什么?
  • 我需要拆分一大段文本分配给各个字段,编辑不当以显示我真正想要的,只需要字符串
  • @DanielFigueroa 目的是获取一个段落并拆分每一行以传递到 XML 表单上的一组文本字段。我受到我工作的限制,我只能做这么多。我无法编辑程序的工作方式,只能在其中放入一些代码以供使用。因此我拉出这个文本,将其拆分,然后分配给 XML 表单上的各个字段。

标签: python


【解决方案1】:

如果您想一次访问 3 个字符的字符串,则需要使用 slicing

您可以使用这样的列表推导获取字符串的 3 个字符长片段的列表:

>>> x = 'this is a string'
>>> step = 3
>>> [x[i:i+step] for i in range(0, len(x), step)]
['thi', 's i', 's a', ' st', 'rin', 'g']
>>> step = 5
>>> [x[i:i+step] for i in range(0, len(x), step)]
['this ', 'is a ', 'strin', 'g']

重要的是:

[x[i:i+step] for i in range(0, len(x), step)]

range(0, len(x), step) 为我们获取每个 step-character 切片的开始索引。 for i in 将遍历这些索引。 x[i:i+step] 获取x 的切片,该切片从索引i 开始,长度为step 个字符。

如果你知道你每次会得到正好四件,那么你可以这样做:

a, b, c, d = [x[i:i+step] for i in range(0, len(x), step)]

如果3 * step < len(x) <= 4 * step 会发生这种情况。

如果你没有正好四个,那么 Python 会给你一个ValueError 试图解压这个列表。因此,我认为这种技术非常脆弱,不会使用它。

你可以这样做

x_pieces = [x[i:i+step] for i in range(0, len(x), step)]

现在,您曾经访问过a,现在可以访问x_pieces[0]。对于b,可以使用x_pieces[1]等。这为您提供了更大的灵活性。

【讨论】:

  • 这似乎最接近我真正想做的事情,但是我如何将每个范围的结果分配给一个变量,我可以这样做吗? a, b, c, d = [x[i:i+step] for i in range(0, len(x), step)]
  • 如果你知道你会总是从列表中得到恰好四个结果,那么你就可以做到这一点。但是,如果您没有恰好四个参数,这将引发异常。
  • 谢谢...试过了,发现很难,哈哈,那么枚举是要走的路吗?也感谢您的额外解释,对学习很有帮助
  • 是的,我认为列表(枚举)是表达这些数据的一种更自然的格式,因为您无法提前知道会有多少片段。我很高兴我的解释有所帮助。 :-)
【解决方案2】:

你可以使用解包

a,b,c,d=x.split(' ');

【讨论】:

  • 由于split方法默认使用空格,所以你使用的函数调用可以压缩成a,b,c,d=x.split()。分号不是必须的。
【解决方案3】:

几种选择

我通常不倾向于正则表达式,但是要分块一个字符串,使用它还不错:

>>> s = 'this is a string'
>>> re.findall('.{1,3}', s)
['thi', 's i', 's a', ' st', 'rin', 'g']

而且矫枉过正

>>> t = StringIO(s)
>>> list(iter(lambda: t.read(3), ''))
['thi', 's i', 's a', ' st', 'rin', 'g']

【讨论】:

    【解决方案4】:

    你可以试试这样的:

    In [77]: x = 'this is a string'
    
    In [78]: a,b,c,d=[[y] for y in x.split()]
    
    In [79]: a
    Out[79]: ['this']
    
    In [80]: b
    Out[80]: ['is']
    
    In [81]: c
    Out[81]: ['a']
    
    In [82]: d
    Out[82]: ['string']
    

    使用itertools.islice():

    In [144]: s = 'this is a string'
    
    In [145]: lenn=len(s)//3 if len(s)%3==0 else (len(s)//3)+1
    
    In [146]: it=iter(s)
    
    In [147]: ["".join(islice(it,3)) for _ in range(lenn)]
    Out[147]: ['thi', 's i', 's a', ' st', 'rin', 'g']
    

    【讨论】:

    • 如果你想用len()分割你会怎么做?让我们一次说 3 个字符?
    • 我不明白,一次三个字符是什么意思?
    • 是的@jonclements 是正确的,我试图获得一个 len() 函数来提取字符串中特定长度的字符,然后将每个块分配给一个变量,就像这里的示例一样跨度>
    • @AshwiniChaudhary 谢谢,这几乎就是我想要的,只需要以某种方式将变量分配给该列表,以便我可以提取每个块以供以后使用
    【解决方案5】:
    x = 'this is a string'
    splitted = x.split()
    count = 0
    while count <= len(splitted) -1:
        print splitted[count]
        count = count + 1
    

    这会将每个部分打印在一行中...在这里您还可以看到如何使用len()

    while 循环将打印每一行,直到计数器达到最大长度

    【讨论】:

      【解决方案6】:
      x, i = 'this is a string', 0 #assigning two variables at once
      while i <= len(x):
         y = x[i: i + 3]
         print y
         i += 3  #i = i + 3
      

      这包括“空格”字符(“”)。

      如果您想保留每个数字,请将它们保存在一个列表中:

      x, my_list, i = 'this is a string', [], 0
      while i <= len(x):
         y = x[i : i + 3]
         my_list.append(y)
         i += 3
      

      【讨论】:

        【解决方案7】:
         def tst(sentence):
            print sentence
            bn=sentence.split(" ");
            i=0
            for i in range(0,len(bn)):
                  a= bn[i]
                  i=i+1
                  print a
        

        这样测试:

         if __name__ == '__main__':
              x="my name is good"
              tst(x)
        

        【讨论】:

          【解决方案8】:

          这将在字符串少于 27 个单词的约束下产生您想要的精确输出。您可以随时使用generators,以防您用完表示块的键。

          x      = 'this is a string'
          chunks = x.split(' ')
          key    = 'a'
          for chunk in chunks:
              print key + " = " + chunk
              key = chr(ord(key) + 1)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-06-20
            • 2011-07-13
            • 1970-01-01
            • 2013-05-09
            • 1970-01-01
            • 2012-04-27
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多