2014-08-30 165 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']