从预先存在的集合创建新的集合列表

时间:2017-04-24 20:15:25

标签: python

我有以下集合列表:

[{1, 2}, {1, 5}, {2, 3}, {2, 5}, {5, 6}, {3, 6}, {3, 4}]

每个数字代表一个位置。这些对是彼此靠近的位置。

从这里我想获得集合列表:

[{2,5}, {1,3,5}, {2,6,4}, {3}, {1, 2, 6}, {5,3}]

这里,第一组表示靠近位置1的所有位置,第二组表示靠近位置2的所有位置,依此类推。我该如何将我的初始集合列表转换为所需的集合列表?

这是我目前的代码:

Input_File = input("Enter your file: ").lower()
with open(Input_File, 'r') as f:
    first_line = f.readline()
    data = f.read().splitlines()

set_of_pairs = [{int(n) for n in line.split()} for line in data]
print(set_of_pairs)

6 #Highest number in txt file
1 2
1 5
2 3
2 5
5 6
3 6
3 4

1 个答案:

答案 0 :(得分:0)

集合不是正确的数据结构。考虑一个列表的字典(或者如果你只想要独特的元素,也可以是集合的字典)

>>> import io
>>> s = """1, 2
... 1, 5
... 2, 3
... 2, 5
... 5, 6
... 3, 6
... 3, 4"""
>>> f = io.StringIO(s)
>>> adjacency = {}
>>> for line in f:
...     a, b = map(int, line.split(','))
...     adjacency.setdefault(a, set()).add(b)
...     adjacency.setdefault(b, set()).add(a)
...
>>> adjacency
{1: {2, 5}, 2: {1, 3, 5}, 3: {2, 4, 6}, 4: {3}, 5: {1, 2, 6}, 6: {3, 5}}
>>> [adjacency[i] for i in sorted(adjacency)]
[{2, 5}, {1, 3, 5}, {2, 4, 6}, {3}, {1, 2, 6}, {3, 5}]
>>>

更重要的是,您可以轻松获得所需的项目:

>>> adjacency[2]
{1, 3, 5}
>>> adjacency[1]
{2, 5}