【问题标题】:Assign split values to multiple variables将拆分值分配给多个变量
【发布时间】:2012-11-20 10:58:53
【问题描述】:

我目前正在编写一个 Python 脚本来处理一些日志并重新格式化某些部分。部分脚本使用了以下代码(作为示例):

var1,var2,var3=foo.split("|")

效果很好。但是,如果有 39 个值,这可能看起来不太好(去掉 Python 的可读性因素),例如:

var1,var2,var3,...,var39=foo.split("|")

有没有更好的方法来格式化这个结构?

【问题讨论】:

  • 你为什么不使用list
  • 您是否有特定原因要将它们分配给单个变量?

标签: python arrays variable-assignment


【解决方案1】:

您可以分配给不同的变量。就像在 Perl 中一样,你只需要将它们定义在一个数组中,因此通过匹配变量的位置和结果来完成赋值。

这是我在交互式 python 中尝试过的:

>>> # this is a grep result, btw
... foo = 'config/some.conf:12:   title = "Super Me"'
>>> [ filename, line, text ] = foo.split(':')
>>> print text
   title = "Super Me"

我喜欢这个而不是字典或数组,尤其是在for 循环中工作时。它使变量名更有意义,即使是循环本地的或临时的。

编辑
第二次编辑以整合 codeforester 的注释(谢谢)。

为了避免搜索变量的使用情况,可以对不需要的值进行虚拟化以明确声明它不会被使用。 python linter预计虚拟变量为_

>>> [ _, line, text ] = foo.split(':')

如果您不确定代币数量,请使用extended iterable

>>> [ filename, line, text, *_ ] = foo.split(':')

如果您的变量不需要 List 属性,您只需删除方括号(然后将变量作为元组进行管理)。

编辑结束

为了胜利的可读性!

【讨论】:

  • Python 的虚拟变量方式是使用_
  • 另外,假设split 会产生一定数量的字段可能不是一个好习惯。更安全的方法是写[filename, line, text, *_] = foo.split(':') 或简单地写filename, line, text, *_ = foo.split(':')
【解决方案2】:

这可能对你有帮助:

strings = "python,splitting,the,string"

var1,var2,var3,var4 = [str(i) for i in strings.split(",")]

【讨论】:

    【解决方案3】:
    lst = foo.split("|")
    lst[0]
    lst[1]
    ...
    

    【讨论】:

      【解决方案4】:

      你可以使用字典:

      In [29]: strs="foo|bar|spam|eggs"
      
      In [31]: d=dict(("var{0}".format(i),x) for i,x in enumerate(strs.split("|")))
      
      In [32]: d
      Out[32]: {'var0': 'foo', 'var1': 'bar', 'var2': 'spam', 'var3': 'eggs'}
      
      In [33]: d['var1']
      Out[33]: 'bar'
      
      In [34]: d['var2']
      Out[34]: 'spam'
      

      【讨论】:

        【解决方案5】:

        使用list 存储获得的令牌:-

        >>> my_str = "Python|Splitting|the|string"
        >>> my_tokens = my_str.split("|")
        >>>
        >>> my_tokens
        ['Python', 'Splitting', 'the', 'string']
        >>> my_token[0]
        'Python'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-20
          • 2021-05-12
          相关资源
          最近更新 更多