【问题标题】:How do I convert a python list which is in numbers into letters?如何将数字形式的python列表转换为字母?
【发布时间】:2012-12-21 12:07:40
【问题描述】:

我有一个 python 程序,它打印出一些由其他 python 程序创建的列表,格式如下: [0, [], 0, 1, [], 1]

我想将 0 和 1 更改为字母,即在上面的输入中,我想要 [x, [], x, y, [], y] 作为输出

到目前为止,我的代码如下:

for x in search.Search(s, s.run()):
    if x == 0:
        return x
    elif x == 1
        return y

我知道我错过了什么,但我不太确定是什么:(

【问题讨论】:

    标签: python list for-loop


    【解决方案1】:

    使用列表推导:

    subst = {0: 'x', 1: 'y'}
    return [subst.get(v, v) if v else v for v in search.Search(s, s.run()]
    

    使用return 可以提前退出循环。

    if v else v 有助于避免尝试将空列表用作键(这会引发 TypeError;列表不可散列,因此不允许用作键)。替代策略是:

    from collections import Hashable
    
    subst = {0: 'x', 1: 'y'}
    hashable = lambda v: isinstance(v, Hashable)
    return [subst.get(v, v) if hashable(v) else v for v in search.Search(s, s.run()]
    

    subst 映射更容易扩展;但是使用函数来映射值(如Jacob's answer 中使用的)对您来说可能更具可读性。

    【讨论】:

    • 不,这会引发错误。TypeError: unhashable type: 'list'
    • 因为该列表包含其他列表 => [0, [], 0, 1, [], 1]。如果子列表始终为空,您可以使用 [map.get(v, v) if v else v ...,但恕我直言,这看起来有点奇怪。
    • @DominicKexel:确实!我认为在这种情况下if 工作得很好,否则需要一个 isinstance。
    • @MartijnPieters 你的代码对于一个简单的问题来说似乎相当复杂:s
    • @JakobBowyer:这是一种方法。你的是另一个。 :-P
    【解决方案2】:

    返回中断执行,你可能想要这样的东西

    def switch_letter(x):
        if x == 0:
            return 'x'
        if x == 1:
            return 'y'
        return x
    
    my_letters = [switch_letter(x) for x in search.Search(s, s.run())] 
    

    【讨论】:

      【解决方案3】:

      这个答案类似于 Martjin 的答案。也许你可以试试这个。但它适用于 python>2.4

      >>> a=[0, [], 0, 1, [], 1]
      >>> s={0:'x',1:'y'}
      >>> [x if isinstance(x,list) else s.get(x,'') for x in a]
      ['x', [], 'x', 'y', [], 'y']
      

      【讨论】:

        【解决方案4】:
            python 3.2
             a= [0, [], 0, 1, [], 1]
             b={0:"x",1:"y"}
             result=[b[i] if isinstance(i,int) else [] for i in a]
        
        
          2. [i  if isinstance(i,list) else b[i] for i in a ]
        

        【讨论】:

          【解决方案5】:

          我认为内置函数映射比列表压缩更简洁,非python程序员更容易理解。

          def sust(item):
              if item == 0:
                  return "x"
              if item == 1:
                  return "y"
              return item
          output = map(sust, search.Search(s, s.run()))
          

          【讨论】:

            【解决方案6】:

            生成器允许在内部使用 if-else 语句。在这种情况下,您的代码将是下一个。

            ['y' if i else 'x' for i in search.Search(s, s.run()]
            

            【讨论】:

            • 你检查过你的输出了吗?他想要[x, [], x, y, [], y],你的代码返回['x', 'x', 'x', 'y', 'x', 'y']
            • 这也会用x 代替空列表。
            猜你喜欢
            • 1970-01-01
            • 2019-03-25
            • 2021-11-10
            • 2020-04-05
            • 1970-01-01
            • 2021-06-29
            • 1970-01-01
            • 2019-03-02
            • 1970-01-01
            相关资源
            最近更新 更多