【问题标题】:Python. Best way to "zip" char and listPython。 “压缩”字符和列表的最佳方式
【发布时间】:2023-03-30 23:24:02
【问题描述】:

我想在 Python 中“压缩”字符和列表:

一个例子:

char = '<'
list = [3, 23, 67]

"zip"(char, list) 
 >>> [('<', 3), ('<', 23), ('<', 67)]

我如何使用 itertools.repeat()

itertools.izip(itertools.repeat(char, len(list)), list)
>>>[('<', 3), ('<', 23), ('<', 67)]

它有效,但找到更多 Pythonic 解决方案非常有趣。

【问题讨论】:

  • 已经是pythonic了,不用担心。 pythonic又是什么?
  • 重复的第二个参数可以省略
  • itertools.izip_longest这里可以用,不过别人贴的LC版要好很多。

标签: python list char zip


【解决方案1】:

这里不需要 itertools。

使用列表推导:

>>> char = '<'
>>> lst = [3, 23, 67]
>>> [(char, n) for n in lst]
[('<', 3), ('<', 23), ('<', 67)]

顺便说一句,不要使用list 作为变量名。它隐藏了内置函数list

【讨论】:

  • 感谢您的使用示例。
【解决方案2】:
[(char, i) for i in list]

顺便说一句,将您的列表命名为“列表”可能不是一个好主意,因为这会影响内部列表类型的构造函数。

【讨论】:

  • 对不起。是的,我知道,并在此处使用名称“列表”作为示例的最佳说明。
【解决方案3】:

如果您想要与使用 itertools 等效的东西 - 使用惰性生成进行迭代 - 那么您可以使用生成器表达式。除了用括号括起来表达式之外,语法几乎等同于列表推导式。

>>> c = '<'
>>> l = [3, 23, 67]
>>> my_gen = ((c, item) for item in l)
>>> for item in my_gen:
...     print item
...
('<', 3)
('<', 23)
('<', 67)

欲了解更多信息,这里是解释它的 PEP:http://www.python.org/dev/peps/pep-0289/

【讨论】:

    【解决方案4】:

    如果 char 只会在所有配对中重复使用,只需使用列表推导:

    >>> [(char, i) for i in lst]
    [('<', 3), ('<', 23), ('<', 67)]
    

    如果char 是一个字符串 字符,并且您想在配对时循环遍历它们(例如zip() 将获得最短长度序列),请使用itertools.cycle()

    >>> from itertools import cycle
    >>> chars = 'fizz'
    >>> lst = range(6)
    >>> zip(chars, lst)
    [('f', 0), ('i', 1), ('z', 2), ('z', 3)]
    >>> zip(cycle(chars), lst)
    [('f', 0), ('i', 1), ('z', 2), ('z', 3), ('f', 4), ('i', 5)]
    

    注意字符串'fizz' 的字符如何被重复用于与数字45 配对;它们将继续循环以匹配任何长度的列表(必须是有限的)。

    【讨论】:

      【解决方案5】:

      如果你真的想使用 zip,方法如下:

      l  = [3, 23, 67]
      zip('<' * len(l), l)
      
      [('<', 3), ('<', 23), ('<', 67)]
      

      更详细地说,itertools.repeat(char, len(list)) 的结果与'&lt;' * 3 非常相似。此外,两者都可以使用 zip(你也可以写 zip(itertools.repeat(char, len(list)), l)))。

      【讨论】:

        猜你喜欢
        • 2021-01-26
        • 1970-01-01
        • 2016-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多