【问题标题】:How to covert a list into a list with sublists? python如何将列表转换为带有子列表的列表? Python
【发布时间】:2021-08-21 11:21:28
【问题描述】:

我正在用python做一个小数据库。

my_list = ['jack', 'liam', 'gary', 'poly']

我想把列表转换成这个

result = [('jack', 'liam'),('liam', 'gary'),('gary', 'poly')]

有没有我可以做到的?

【问题讨论】:

标签: python


【解决方案1】:

使用list comprehension

  • 迭代到列表的倒数第二个值
  • 以元组的形式获取当前值和下一个值。
my_list = ['jack', 'liam', 'gary', 'poly']
new_list = [(my_list[i],my_list[i+1]) for i in range(len(my_list)-1)]

print(new_list)
>> [('jack', 'liam'), ('liam', 'gary'), ('gary', 'poly')]

或使用zip()

将连续组合作为元组返回。

my_list = ['jack', 'liam', 'gary', 'poly']
new_list = list(zip(my_list, my_list[1:]))

print(new_list)
>> [('jack', 'liam'), ('liam', 'gary'), ('gary', 'poly')]

【讨论】:

    【解决方案2】:

    zip 将从两个可迭代对象中返回一个元组;如果您采用相同的列表,但根据需要移动(在这种情况下,向前一个元素),您可以获得预期的结果。

    此外,生成器将在最短的迭代(第二个)上耗尽。

    >>> [(a,b) for (a,b) in zip(my_list, my_list[1:])]
    [('jack', 'liam'), ('liam', 'gary'), ('gary', 'poly')]
    

    【讨论】:

    • 你能解释一下这里的 zip 吗,这样我可以在我的代码中添加注释以记住。
    • 您可以查看我的答案以及doc
    • list(zip(my_list, my_list[1:])) 也一样。
    【解决方案3】:
    my_list = ['jack', 'liam', 'gary', 'poly']
    
    result_list = [(my_list[i],my_list[i+1]) for i in range(len(my_list) - 1)]
    
    print(result_list)
    

    输出

    [('jack', 'liam'), ('liam', 'gary'), ('gary', 'poly')]
    

    我们可以将 2 个元素提取到一个元组中,直到我们迭代并到达倒数第二个元素。

    【讨论】:

      【解决方案4】:
      result = []
      my_list = ['jack', 'liam', 'gary', 'poly']
      for i, item in enumerate(my_list):
         if i+1 == len(my_list): break
         result.append((item, my_list[i+1]))
      

      或者更 Pythonic 和优雅的方式:

      result = [(item, my_list[i+1]) for i, item in enumerate(my_list) if i+1 < len(my_list)] 
      

      【讨论】:

        【解决方案5】:
        my_list = ['jack', 'liam', 'gary', 'poly']
        result = []
        for i in range(0, len(my_list)):
            if not i > len(my_list)-2:
                result.append((my_list[i], my_list[i+1]))
        

        输出

        [('jack', 'liam'), ('liam', 'gary'), ('gary', 'poly')]
        

        【讨论】:

          猜你喜欢
          • 2020-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-18
          • 2020-02-25
          • 2016-07-05
          • 2020-02-01
          • 1970-01-01
          相关资源
          最近更新 更多