【问题标题】:how to transform a python list to a list of tuple in 1/2 lines?如何将 python 列表转换为 1/2 行的元组列表?
【发布时间】:2021-03-04 10:59:07
【问题描述】:

输入:['a','b','c','d','e']

输出:[('a','b'),('c','d'),('e')]

我怎样才能在 1 或 2 行代码中做到这一点?

目前我有这个:

def tuple_list(_list):
    final_list = []
    temp = []
    for idx, bat in enumerate(_list):
        temp.append(bat)
        if idx%2 == 1:
            final_list.append(temp)
            temp = []
    if len(temp) > 0: final_list.append(temp)
    return final_list
        
tuple_list(['a','b','c','d','e'])

【问题讨论】:

标签: python list optimization tuples logic


【解决方案1】:

您可以使用列表推导。首先,我们将有一个步长为 2 的范围。使用它,我们将从输入列表中获取适当的切片以获得所需的结果:

lst = ['a','b','c','d','e']
result = [tuple(lst[i:i+2]) for i in range(0, len(lst), 2)]

【讨论】:

    【解决方案2】:

    试试这个列表理解

    x = ['a','b','c','d','e']
    [(x[i],x[i+1]) for i in range(0,len(x)-1) if i%2==0]
    

    【讨论】:

      【解决方案3】:

      您可以使用内置的 iter() 函数创建一个迭代器,并将其传递给内置的 zip() 函数。

      l = ['a','b','c','d','e']
      i = iter(l)
      zip(i, i)
      

      如果你想按 3 分组,你可以将它传递 3 次给 zip()

      zip(i, i, i)
      

      【讨论】:

        【解决方案4】:
        x = ['a','b','c','d','e']
        y = [tuple(x[i:i+2]) for i in range(0,len(x),2)]
        

        您可以通过在列表上移动大小为 2 的滑动窗口来对数组进行切片。

        range(start, end, step) 可帮助您逐步移动窗口(在您的情况下为 2),而切片可帮助您从较大的列表中创建较小的列表。

        所有放入列表推导式的内容都会为您提供所需的输出。

        【讨论】:

          猜你喜欢
          • 2020-03-31
          • 2011-07-27
          • 2017-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多