【问题标题】:Create string(s) from list(s) items从列表项创建字符串
【发布时间】:2010-01-22 10:30:54
【问题描述】:

我有一个列表,list = ['foo','bar'],现在我想从每个项目创建一个字符串。

每个字符串都被命名为item并具有item的值

foo = 'foo' 酒吧 = '酒吧'

谢谢大家,我会改用字典

【问题讨论】:

  • 不要使用list作为变量名,它会影响内置
  • 有什么意义?你想解决什么更高层次的抽象?

标签: python


【解决方案1】:

不要那样做。请改用字典。

strings = dict((x, x) for x in L)

【讨论】:

    【解决方案2】:

    Ignacio Vazquez-Abrams 是对的,使用字典更好。但如果你坚持让它们作为变量使用,你总是可以这样做:

    strings = dict((x, x) for x in L)
    locals().update(strings)
    

    PS:Edan Maorexec 的版本存在安全问题。它不会处理["foo", "';__import__('os').system('rm -rf ~');'"],例如:)

    【讨论】:

      【解决方案3】:

      试试:

      >>> l = ["foo", "bar"]
      >>> for item in l:
          exec("%s = '%s'" % (item, item))
      

      注意:为什么需要这个?你确定这是做你想做的最好的方法吗?我问是因为这通常不是一个好主意。

      安全警告:正如 Attila Oláh 所指出的,使用“exec”运行任意代码是一个非常糟糕的主意。仅当您控制列表中的字符串时才使用此选项(例如,它们不是来自用户的输入)。

      【讨论】:

        【解决方案4】:

        尽管有它们的名字,Python 中的变量实际上不应该是变量。如果您有要与“名称”相关联的数据,则应该使用 dict:

        data = {}
        for s in ['foo', 'bar']:
            data[s] = s
        

        有时(!)可以修改 locals() 以引入新变量,但是由于您没有明智的方式来引用它们(因为您在编写代码时不知道它们的名字),所以真的没有其中的价值。它所做的只是让你的代码很多变慢并且更难理解。

        【讨论】:

          【解决方案5】:

          看看http://docs.python.org/library/functions.html#setattr

          你应该可以做一些事情

          for x in list:
              setattr(object, x, x)
          

          假设 object 是您想要添加属性的任何对象。

          【讨论】:

            猜你喜欢
            • 2011-04-20
            • 2016-02-13
            • 1970-01-01
            • 2016-12-02
            • 2014-02-10
            • 2020-04-21
            • 2013-08-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多