2013-03-03 67 views
0

假設你有一個元組,如清單:Python列表插入

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(值1,值2,值3),它有三個參數的函數:.. ),並使用它可以找到索引值,並按照正確的順序在列表中插入元組。發現它十分困難和幫助,將不勝感激

+0

「三個參數」 :這三個參數是什麼?不是隻有列表和任何你插入它? (這聽起來很像'bisect.insort_left'的作用。) – DSM 2013-03-03 18:13:12

回答

1

爲了簡單起見,只是追加了新的價值觀和對列表進行排序:

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)) 
0
>>> 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)] 
+0

抱歉,幾乎類似的答案,併發問題。 – jurgenreza 2013-03-03 18:28:32

0

無需編寫函數:

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)) 
2

要插入一個元組,如果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()