【问题标题】:python list insertionpython 列表插入
【发布时间】:2013-03-04 02:44:51
【问题描述】:

假设您有一个元组列表,例如:

list1 = [(0, 0, 0), (1, 0, 0), (2, 0, 0), (3, 0, 0)]

并且您想将元组 (0, 1, 0) 添加到它应该按顺序排列的列表中:

list1 = [(0, 0, 0), (0,1,0), (1, 0, 0), (2, 0, 0), (3, 0, 0)] 

并说您还想将元组 (0,1,1) 添加到它应该按顺序排列的列表中:

list1 = [(0, 0, 0), (0,1,0), (0,1,1), (1, 0, 0), (2, 0, 0), (3, 0, 0)] 

并说您还想将元组 (3,1,0) 添加到它应该按顺序排列的列表中:

list1 = [(0, 0, 0), (0,1,0), (0,1,1), (1, 0, 0), (2, 0, 0), (3, 0, 0), (3, 1, 0)] 

我想尝试提出一个函数,它根据元组中的值 (def (value1, value2, value3):...) 接受三个参数,并使用它可以找到索引值并插入列表中的元组以正确的顺序。发现它非常困难和帮助将不胜感激

【问题讨论】:

  • “取三个参数”:三个参数是什么?不只是列表以及您要插入的任何内容吗? (这听起来很像 bisect.insort_left 所做的。)

标签: python arrays tuples


【解决方案1】:

如果list1 已排序,则插入单个元组:

import bisect

bisect.insort(list1, (0, 1, 0))

合并两个排序列表:

import heapq

tuples = [(0,1,0), (0,1,1), (3,1,1)]
list1 = list(heapq.merge(list1, tuples))

或者对于小型列表 (len(L) < 1000000):

list1.extend(tuples)
list1.sort()

【讨论】:

    【解决方案2】:

    为了简单起见,只需附加新值并对列表进行排序:

    a = [(0, 0, 0), (1, 0, 0), (2, 0, 0), (3, 0, 0)]
    
    def add_to_list(item1, item2, item3, the_list):
        the_list.append((item1, item2, item3))
        return sorted(the_list)    
    
    print(add_to_list(0, 1, 0, a))
    

    【讨论】:

      【解决方案3】:
      >>> def fun(value1, value2, value3):
              tup = (value1, value2, value3)
              list1.append(tup)
              list1.sort()
              return(list1)
      
      >>> list1 = [(0, 0, 0), (0,1,0), (1, 0, 0), (2, 0, 0), (3, 0, 0)] 
      >>> fun(0,1,1)
      [(0, 0, 0), (0, 1, 0), (0, 1, 1), (1, 0, 0), (2, 0, 0), (3, 0, 0)]
      

      【讨论】:

      • 对于几乎相似的答案,并发问题感到抱歉。
      【解决方案4】:

      不带写功能:

      a = [(0, 0, 0), (1, 0, 0), (2, 0, 0), (3, 0, 0)]
      a = sorted(a+[(0,1,1)])
      

      使用函数(t为元组):

      f = lambda a,t: sorted(a+[t])
      a = f(a, (1, 1, 0))
      

      【讨论】:

        猜你喜欢
        • 2019-03-27
        • 2012-05-08
        • 1970-01-01
        • 1970-01-01
        • 2021-05-02
        • 1970-01-01
        • 2013-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多