【发布时间】:2020-08-25 16:22:54
【问题描述】:
我正在尝试读取一个包含大约 2000 行 Tuples 的 txt 文件,每行包含一个 Tuple。
这是“data.txt”的前 10 行。
(16, 21, 24, 42, 49)
(2, 12, 40, 42, 45)
(6, 19, 22, 36, 48)
(2, 5, 20, 24, 33)
(8, 12, 24, 28, 44)
(3, 15, 29, 30, 37)
(6, 17, 30, 33, 43)
(3, 15, 16, 29, 42)
(17, 18, 20, 35, 39)
(20, 21, 23, 43, 48)
我已成功将Tuple 的整行复制到List 中,但Python 默认将其存储为String 的List。
这是输出:
['(16, 21, 24, 42, 49)', '(2, 12, 40, 42, 45)', '(6, 19, 22, 36, 48)', '(2, 5, 20, 24, 33)', '(8, 12, 24, 28, 44)', '(3, 15, 29, 30, 37)', '(6, 17, 30, 33, 43)', '(3, 15, 16, 29, 42)', '(17, 18, 20, 35, 39)', '(20, 21, 23, 43, 48)']
如何将List 的String 转换为List 的Tuples。因为我想将元组的每个索引与元组的整个List 进行比较,所以如果索引的值匹配,我想要Tuples 的索引匹配的行号作为输出。因此,如果我从 "data.txt" 中获取第二个元组,即 (2, 12, 40, 42, 45) ,我需要从列表中的下一个 Tuple 开始比较它 [即 (6, 19, 22, 36, 48)] 到整个List 的Tuples。
例如:
如果我采用第二个元组(2、12、40、42、45),我需要找到数字“2”出现在List 其余Tuples 的同一索引中的哪一行。数字“2”出现在第 1 行的下一个。 4,对于数字“12”,它在第 4 行。 5.
我将“data.txt”的内容复制到列表的代码。我还没有进入比较部分。如果您建议一些方法来比较上面提到的Tuples,这将非常有帮助。
with open('Data.txt', 'r+') as file:
lines = file.readlines()
data = []
for line in lines:
data.append(line.strip())
print(data[:11]) # Printing only first 10 lines from 1999 lines
print(f"Number of tuples = {len(data)}")
【问题讨论】:
-
你可以在每个元组上使用
ast.literal_eval。 -
在你的循环中而不是
data.append(line.strip())只是做data.append(ast.literal_eval(line))- 你甚至不应该需要.strip() -
顺便说一句,请正确缩进您的代码。
-
对不起,我粘贴代码时忘记了。
-
@alani 我将 data.append(line.strip()) 替换为 data.append(ast.literal_eval(line)),你的权利,我将 txt 文件中的内容准确复制到列表中。非常感谢
标签: python python-3.x list tuples