我想在列表中切一个集合,但每次我这样做,我得到一个空列表作为回报。
我试图完成的事情(也许有一种更简单的方法):
这是我的代码:
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']]
答案 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"的第一个和最后一个元素。在比较中。如果您需要不同长度的集合,这将更加灵活。