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']]
3 个回答
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']
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
我觉得你想做的事情是这样的:
>>> 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]
来忽略“集合”中的第一个和最后一个元素进行比较。这样做更灵活,如果你将来需要处理不同长度的集合时会更方便。