2014-08-30 47 views
1

我想切片列表中的一個集合,但每次我這樣做時,我都會得到一個空列表作爲回報。在列表中設置python切片

什麼,我盡力去完成(也許還有一個更簡單的方法):

  • 我得到的集列表
  • 每組有5個項目
  • 我想比較針對一組新該列表(如果集合已經存在於列表中)
  • 該集合中的第一個和最後一個項目與比較無關,所以只有位置2-4對於已經存在的集合的搜索有效

這裏是我的代碼:

result_set = ['1', '2', '3', '4', '5'] 

result_matrix = [] 

result_matrix.append(result_set) 

切片集是沒有問題的:

print result_set[1:4] 

['2', '3', '4'] 

print result_matrix[:][1:4] 

[] 

我希望:

[['2', '3', '4']] 
+2

您是不是指'result_matrix [:] [1:4]'而不是'result_matrix [:] [1:4]'?或'result_matrix.extend(result_set)'而不是'result_matrix.append(result_set)'? – falsetru 2014-08-30 13:49:02

+0

問題在於result_matrix [:] ==結果矩陣。 result_matrix在其中只有一個結果集,即第0個結果集。您通過第4個結果集(這是一個空集)請求它獲得第1個結果集。 – turbulencetoo 2014-08-30 13:52:24

+0

我覺得有責任指出這一點:'result_set'是一個列表,而不是一個集合。 – SethMMorton 2014-08-30 22:31:41

回答

0

我想這是你想要做什麼:

>>> target_set = ['2', '3', '4'] 
>>> any([l for l in result_matrix if target_set == l[1:-1]]) 
True 
>>> target_set = ['1', '2', '3'] 
>>> any([l for l in result_matrix if target_set == l[1:-1]]) 
False 

要概括,使一個函數:

def is_set_in_matrix(target_set, matrix): 
    return any(True for l in matrix if list(target_set) == l[1:-1]) 

>>> result_matrix = [['1', '2', '3', '4', '5']] 
>>> is_set_in_matrix(['1', '2', '3'], result_matrix) 
False 
>>> is_set_in_matrix(['2', '3', '4'], result_matrix) 
True 
# a quirk - it also works with strings...` 
>>> s = '234' 
>>> is_set_in_matrix(s, result_matrix) 
True 

請注意,我已經使用l[1:-1]忽略比較中「set」的第一個和最後一個元素。如果你需要一組不同的長度,這更靈活。

+0

非常感謝,這正是我需要的。我改變了這個:any([l for result_matrix,如果target_set ** [1:-1] ** == l [1:-1]]中的l) – user3740082 2014-08-30 15:09:23

1
>>> result_set = ['1', '2', '3', '4', '5'] 

>>> print result_set[1:4] 
['2', '3', '4'] 

>>> result_matrix.append(result_set[1:4]) 
>>> result_matrix 
[['2', '3', '4']] 
0

使用result_matrix[:]返回整個矩陣它是。你需要把你想要的結果作爲數組的一部分。

>>> result_matrix.append(result_set) 
>>> result_matrix[:] 
[['1', '2', '3', '4']] 
>>> result_matrix[:][0] 
['1', '2', '3', '4'] 
>>> result_matrix[0][1:4] 
['2', '3', '4'] 

此外,由falsetru指出:

>>> result_matrix.extend(result_set) 
>>> result_matrix 
['1', '2', '3', '4'] 
>>> result_matrix[1:4] 
['2', '3', '4']