列表中设置的python切片

时间:2014-08-30 13:47:13

标签: python list set slice

我想在列表中切一个集合,但每次我这样做,我得到一个空列表作为回报。

我试图完成的事情(也许有一种更简单的方法):

  • 我有一个集合列表
  • 每组有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']]

3 个答案:

答案 0 :(得分: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']]

答案 1 :(得分: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']

答案 2 :(得分: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"的第一个和最后一个元素。在比较中。如果您需要不同长度的集合,这将更加灵活。