假设我有一个整数列表x
。我还有另外两个列表z1
和z2
,每个列表都有x
个单独的索引,其中z1
中的任何元素都不等于{{1}中的元素}}。我想删除与z2
中的索引相对应的x
的所有元素,以留下列表z1
。然后,我想更新y
中的索引,使它们与z2
中的相应元素相对应,就像删除之前一样。
举个例子:
x
这应该产生:
x = [3, 4, 6, 8, 9, 10, 13, 14]
z1 = [0, 5, 7]
z2 = [1, 2, 6]
y = []
for i in x:
if i not in z1:
y.append(x[i])
# Now I need to update the values of z2 ...
我怎样才能优雅地做到这一点?
答案 0 :(得分:2)
设置z1
一套。这将有助于提高第2步的性能。
>>> z1 = set(z1)
根据z1
获取x
的所有匹配元素
>>> y = [item for index, item in enumerate(x) if index not in z1]
从x
获取旧值并形成一组
>>> old = {x[item] for item in z2}
然后获取y
的所有值的索引(如果数据不在old
中),以获取z2
>>> z2 = [index for index, item in enumerate(y) if item in old]
那就是它。
>>> y
[4, 6, 8, 9, 13]
>>> z2
[0, 1, 4]
答案 1 :(得分:0)
>>> x = [3, 4, 6, 8, 9, 10, 13, 14]
>>> z1 = [0, 5, 7]
>>> z2 = [1, 2, 6]
>>>
>>> z2_values = [x[i] for i in z2]
>>> y = [item for i, item in enumerate(x) if i not in z1]
>>> value_to_indexes = {v: i for i, v in enumerate(y)}
>>> z2 = [value_to_indexes[v] for v in z2_values]
>>> y
[4, 6, 8, 9, 13]
>>> z2
[0, 1, 4]