使用包含所有唯一元素

时间:2015-06-04 16:18:02

标签: python list replace graph

假设我有一个列表,其中包含图表的唯一节点A - D

List1 = [A, B, C, D]

另一个列表,其中包含具有元素对的图的边缘:

List2 = [[C, D], [B, A], [D, A], [C, B]]

如何编写一种快速经济的方法,用List2中的元素索引替换List1的所有元素,以便我得到:

List3 = [(2, 3), (1, 0), (3, 0), (2, 1)]

我目前的做法是:

for i in range(len(List2)):
    List3[i] = (List1.index(List2[i][0]), List1.index(List2[i][1]))

但是,对于大型列表来说,这需要很长时间,而我正试图找到一种更快的方法来实现这一目标。

2 个答案:

答案 0 :(得分:3)

您可以在信件中创建一个dict到您想要的指数

>>> indices = {key: index for index, key in enumerate(List1)}
>>> indices
{'B': 1, 'D': 3, 'A': 0, 'C': 2}

然后使用嵌套列表理解

>>> [[indices[i] for i in sub] for sub in List2]
[[2, 3], [1, 0], [3, 0], [2, 1]]

修改
获取元组列表

>>> [tuple(indices[i] for i in sub) for sub in List2]
[(2, 3), (1, 0), (3, 0), (2, 1)]

答案 1 :(得分:0)

您可以使用列表推导和列表索引方法来实现您想要的效果。

List1 = ['A', 'B', 'C', 'D']

List2 = [['C', 'D'], ['B', 'A'], ['D', 'A'], ['C', 'B']]

print [ (List1.index(item[0]),List1.index(item[1])) for item in List2]