【问题标题】:pairs of elements of a list - Python [duplicate]列表的元素对 - Python [重复]
【发布时间】:2018-06-26 02:58:29
【问题描述】:

给定一个生成元组的列表,例如:

lst =  ['d', '112', 'b', 'c', 'i', 'a', 'e']

输出:

[('d','112'), ('d','b'), ('d','c'), ('d','i'), ..., ('a','e')]

谢谢。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    如果您想让代码易于阅读,嵌套循环是最经典的解决方案。

    results = []
    for i in range(len(lst)):
        for j in range(i + 1, len(lst)):
            results.append((lst[i], lst[j]))
    

    如果你想让它更pythonic,你应该知道如何使用zip函数。

    results = []
    for i in range(len(lst)):
        results += list(zip([lst[i]] * (len(lst) - i - 1), lst[i + 1:]))
    

    如果你想更疯狂,为了保存你的行号,试试递归 lambda 函数。

    f = lambda x: [] if len(x) <= 1 else list(zip([x[0]] * (len(x) - 1), x[1:])) + f(x[1:])
    

    那么f(lst)就是你想要的。

    无论如何,请记住,无论您的代码多短,时间复杂度都保持不变。如果您真的不需要超短代码,那么使用简单的代码会更好地进行长期维护。

    【讨论】:

      【解决方案2】:

      试试看

      import itertools
      
      lst =  ['d', '112', 'b', 'c', 'i', 'a', 'e']
      
      for comb in itertools.combinations(lst, 2):
          print(comb)
      

      【讨论】:

        猜你喜欢
        • 2012-10-12
        • 1970-01-01
        • 1970-01-01
        • 2015-08-18
        • 2019-09-09
        • 2023-03-11
        • 2011-05-07
        • 2014-06-12
        • 1970-01-01
        相关资源
        最近更新 更多