2017-04-24 125 views
0

我正在嘗試讀取文本文件,並將文件內部的數字對變爲集合列表。將集合分解成集合列表

這裏是我的文本文件的樣子:

4 #Number of pairs 
1 2 
4 5 
2 3 
3 4 

我已經能夠把從文本文件中的數據到一個列表,然後將其轉換成集,但我最終得到了大規模的集而不是像我想要的那樣的集合列表。

這裏是我的代碼目前的樣子:

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 = set(data) 
print(set_of_pairs) 

電流輸出:

{'1 2', '2 3', '4 5', '3 4'} 

所需的輸出:

[{'1 2'}, {'2 3'}, {'4 5'}, {'3 4'}] 
+0

你可以試試'set_of_pairs中的x {[x}]「,但順序不會被保留。有關係嗎?如果是這樣,不要在第一個地方創建一個具有值的集合... –

+0

所以你希望每個集合都包含一個** ** string **項目? –

+0

坦率地說,對我來說看起來合適的數據結構是一個ints元組列表:[tuple(map(int,line.split()))for line in f]'給出:[[(1,2), (4,5),(2,3),(3,4)]' –

回答

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 = [{line} for line in data] 
print(set_of_pairs) #=> [{'1 2'}, {'2 3'}, {'4 5'}, {'3 4'}] 

然而,似乎更可能是你想的包含各兩個整數集的列表,如:

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] 
# Note that the order of pairs is not guaranteed 
print(set_of_pairs) #=> [{1, 2}, {2, 3}, {4, 5}, {3, 4}] 

甚至元組的列表:

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 = [tuple(line.split()) for line in data] 
print(set_of_pairs) #=> [(1, 2), (2, 3), (4, 5), (3, 4)]