【问题标题】:Converting string representation of array (of string) to the array in python将数组(字符串)的字符串表示形式转换为python中的数组
【发布时间】:2018-01-03 15:15:35
【问题描述】:

我有一个 unicode 数组,我想将它转换为数组。 给定输入格式和输出格式如下:

p = u'(abcd, pqrs, fghj, mjki, loki)'

我希望输出如下:

output = ('abcd', 'pqrs', 'fghj', 'mjki', 'loki')

【问题讨论】:

  • 我认为您的意思是将其转换为元组,而不是数组。您还在这里尝试过什么?
  • 你的数组可能是一个列表
  • 输入的编码是什么?看起来有点像 yaml 但不完全是。只找出所有不间断的字符序列就足够了吗?
  • 为什么output = [x.strip() for x in p.strip("(").strip(")").split(",")] 不起作用?
  • '(abcd, "de,ef", loki)' 这样的可能吗?如果是,应该如何处理?

标签: python arrays string unicode


【解决方案1】:
p = u'(abcd, pqrs, fghj, mjki, loki)'
output = [x.strip() for x in p.strip("(").strip(")").split(",")]
print(output)

这将保留 unicode:

[u'abcd', u'pqrs', u'fghj', u'mjki', u'loki']

【讨论】:

    【解决方案2】:

    非常肮脏的方式,但是:

    >>> tuple(u'(abcd, pqrs, fghj, mjki, loki)'[1:-1].split(', '))
    ('abcd', 'pqrs', 'fghj', 'mjki', 'loki')
    
    
    p = tuple(p[1:-1].split(', '))
    

    所以,我认为您可以在使用之前改进您的输入数据。

    【讨论】:

      【解决方案3】:

      由于它看起来几乎是许多可用的 YAML 语法之一,我建议将其修补为正确的 YAML,然后使用适当的 YAML 解析器:

      import yaml
      
      p = u'(abcd, pqrs, fghj, mjki, loki)'
      print(yaml.load('[' + p[1:-1] + ']'))
      

      print(yaml.load(p.replace('(', '[').replace(')', ']')))
      

      这种方式也可以正确解析嵌套结构(如果它们出现)。

      为了获得更好的性能(如果结构很大),您甚至可以考虑这样做:p.translate({40:91, 41:93}) 用于将括号转换为方括号。

      【讨论】:

        【解决方案4】:

        您可以预先将replace()括号与一个空字符串,用逗号分隔字符串',',并在每个元素上应用str.stripmap()

        p = u'(abcd, pqrs, fghj, mjki, loki)'
        
        print(tuple(map(str.strip, p.replace('(', '').replace(')','').split(','))))
        

        哪些输出:

        ('abcd', 'pqrs', 'fghj', 'mjki', 'loki')
        

        【讨论】:

          【解决方案5】:

          你可以使用re.findall:

          import re
          p = u'(abcd, pqrs, fghj, mjki, loki)'
          data = tuple(map(str, re.findall('[a-zA-Z]+', p)))
          

          输出:

          ('abcd', 'pqrs', 'fghj', 'mjki', 'loki')
          

          【讨论】:

            猜你喜欢
            • 2016-12-17
            • 2023-03-03
            • 2017-10-07
            • 1970-01-01
            • 2021-02-20
            • 1970-01-01
            • 1970-01-01
            • 2012-10-17
            • 1970-01-01
            相关资源
            最近更新 更多