【问题标题】:Selecting 1st element of every list within list选择列表中每个列表的第一个元素
【发布时间】:2021-10-19 09:28:28
【问题描述】:

我有以下包含多个元素的列表:

list = [[1633425661439, 0.11643042583898743],
        [1633428739018, 0.11682454707026001],
        [1633432086311, 0.11950356856187618]]

我想分别用每个列表中的第一个和第二个数字填充 new_list1new_list2,产生:

new_list1 = [1633425661439,
            1633428739018,
            1633432086311]

还有:

new_list2 = [0.11643042583898743,
            0.11682454707026001,
            0.11950356856187618]

我试过了:

for n in list:
        for i in n:
            new_list1.append(i[0])
            new_list2.append(i[1])

但是得到了:TypeError: 'int' object is not subscriptable

【问题讨论】:

    标签: python list loops


    【解决方案1】:

    你可以试试

    list_ = [[1633425661439, 0.11643042583898743],
            [1633428739018, 0.11682454707026001],
            [1633432086311, 0.11950356856187618]]
    
    list_a = [first[0] for first in list_]
    list_b = [first[1] for first in list_]
    

    其他方式

    new_list1 = []
    new_list2 = []
    
    for inner_list in list_:
        new_list1.append(inner_list[0])
        new_list2.append(inner_list[1])
    

    【讨论】:

      【解决方案2】:

      你可以像这样转置它:

      lst = [[1633425661439, 0.11643042583898743],
             [1633428739018, 0.11682454707026001],
             [1633432086311, 0.11950356856187618]]
      
      new_list_1, new_list_2 = map(list, zip(*lst))
      

      如果您可以使用元组而不是列表,则可以使用以下方法:

      new_list_1, new_list_2 = zip(*lst)
      

      而且你真的不应该将变量命名为list。它会隐藏内置类型。

      你也可以使用简单的推导:

      new_list_1 = [a for a, _ in lst]
      new_list_2 = [a for _, a in lst]
      

      一些文档:

      【讨论】:

      • 在这里使用地图要重得多
      【解决方案3】:

      你的一层嵌套太多了,这会

      for n in list:
          for i in n:
              print(i)
      

      将打印单个元素,即数字,您需要这样做

      for n in list:
          new_list1.append(n[0])
          new_list2.append(n[1])
      

      作为旁注,请避免使用list,因为它已在python 中使用。掩盖它可能会导致意外行为,您可以使用lst 名称,即:

      lst = [[1,2],[3,4],[5,6]]
      new_lst1 = []
      new_lst2 = []
      for n in lst:
          new_lst1.append(n[0])
          new_lst2.append(n[1])
      print(new_lst1)
      print(new_lst2)
      

      输出

      [1, 3, 5]
      [2, 4, 6]
      

      【讨论】:

        【解决方案4】:

        您可以在 for 循环本身中解压缩第一个和第二个数字。 (顺便说一句,最好不要将变量称为“list”,因为它与python内置相同)

        list_ = [[1633425661439, 0.11643042583898743],
                [1633428739018, 0.11682454707026001],
                [1633432086311, 0.11950356856187618]]
        new_list1 = []
        new_list2 = []
        for (i, j) in l:
            new_list1.append(i)
            new_list2.append(j)
        

        【讨论】:

          【解决方案5】:
          1. PEP-8 code style guideline 之后的变量请不要使用保留关键字命名变量,例如 listdictfor 等。

          2. 使用第二个循环,您可以遍历内部列表中的 int 数字。 如果您只需要使用每个列表的前 2 个元素,一个循环就足够了:

          list_ = [
              [1633425661439, 0.11643042583898743],
              [1633428739018, 0.11682454707026001],
              [1633432086311, 0.11950356856187618]]
          
          for inner_list in list_:
              new_list1.append(inner_list[0])
              new_list2.append(inner_list[1])
              
          

          【讨论】:

            【解决方案6】:
            list= [[1633425661439, 0.11643042583898743], [1633428739018, 0.11682454707026001], [1633432086311, 0.11950356856187618]]
            new_list1 = [ ] 
            new_list2 = [ ] 
            for inner_list in list:
               new_list1.append(inner_list[0])
               new_list2.append(inner_list[1])
            print(new_list1)
            print(new_list2)
            

            【讨论】:

            • 您的解决方案只会将一个元素添加到 new_list1 和 new_list2 中,而预计会添加更多元素。如果没有循环,它也将被限制为样本中元素的确切数量。
            猜你喜欢
            • 2013-12-24
            • 2014-12-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-21
            • 1970-01-01
            • 1970-01-01
            • 2013-10-29
            相关资源
            最近更新 更多