如何用python编写大型列表的列表?
我想将列表列表写入文件。 列表列表如下所示:如何用python编写大型列表的列表?,python,arrays,Python,Arrays,我想将列表列表写入文件。 列表列表如下所示: a = [[1,2,3], [4,5,6], [7,8,9]] a = [[1,2,3,...,20], [21, 22, ..., 39], ...] 我写 with open("my_file.txt", 'w') as fp: fp.write('\n'.join('{} {} {}'.format(x[0],x[1],x[2]) for x in a if x is not None)) 然而,我的列表a现在
a = [[1,2,3], [4,5,6], [7,8,9]]
a = [[1,2,3,...,20], [21, 22, ..., 39], ...]
我写
with open("my_file.txt", 'w') as fp:
fp.write('\n'.join('{} {} {}'.format(x[0],x[1],x[2]) for x in a if x is not None))
然而,我的列表a现在有包含19个值的列表,很多!
它看起来像:
a = [[1,2,3], [4,5,6], [7,8,9]]
a = [[1,2,3,...,20], [21, 22, ..., 39], ...]
我不想再写16个{}符号,也不想通过添加另外16个x[I]来修改其中的format命令,其中I=3,18。
有没有一个聪明的方法可以做到这一点
此外,是否有一种有效的方法来做到这一点?我的列表a
将包含10000个列表,每个列表包含19个值
一般来说,有什么简单的技巧可以提高将这些结果写入文件的效率吗
谢谢大家!
有没有一种有效的方法可以做到这一点
我会用
pickle模块实现用于序列化和反序列化Python对象结构的二进制协议。“pickle”是将Python对象层次结构转换为字节流的过程,“unpickle”是反向操作,即将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构
输出
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
有没有一种有效的方法可以做到这一点
我会用
pickle模块实现用于序列化和反序列化Python对象结构的二进制协议。“pickle”是将Python对象层次结构转换为字节流的过程,“unpickle”是反向操作,即将字节流(来自二进制文件或类似字节的对象)转换回对象层次结构
输出
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
最简单的选择是将其序列化为JSON:
import json
a = [[1,2,3], [4,5,6], [7,8,9]]
with open("my_file.txt", 'w') as fp:
json.dump(a, fp)
您可以按如下方式将其加载回:
import json
with open("my_file.txt") as fp:
a = json.load(fp)
print(a)
或者,如果不想使用JSON,可以将列表转换为字符串,然后像前面一样使用join:
a = [[1,2,3], [4,5,6], [7,8,9]]
for index, item in enumerate(a):
a[index] = str(item)
with open("my_file.txt", 'w') as fp:
fp.write('\n'.join(a))
这没有JSON干净,但它可以完成任务。最简单的选择是将其序列化为JSON:
import json
a = [[1,2,3], [4,5,6], [7,8,9]]
with open("my_file.txt", 'w') as fp:
json.dump(a, fp)
您可以按如下方式将其加载回:
import json
with open("my_file.txt") as fp:
a = json.load(fp)
print(a)
或者,如果不想使用JSON,可以将列表转换为字符串,然后像前面一样使用join:
a = [[1,2,3], [4,5,6], [7,8,9]]
for index, item in enumerate(a):
a[index] = str(item)
with open("my_file.txt", 'w') as fp:
fp.write('\n'.join(a))
这不像JSON那样干净,但它可以完成任务。使用
print()
和*
解包操作符迭代列表并写入子列表的每个元素:
a = [[1,2,3], [4,5,6], [7,8,9]]
with open('my_file.txt', 'w') as fp:
for sublist in a:
if sublist is not None: # filter out None items
print(*sublist, file=fp)
my_file.txt的内容:
123
4 5 6
7 8 9
这不会将任何None
项打印到文件中。如果您确实打算删除空列表,那么您可以只写:
if sublist:
print(...)
迭代列表并使用print()
和*
解包运算符写入子列表的每个元素:
a = [[1,2,3], [4,5,6], [7,8,9]]
with open('my_file.txt', 'w') as fp:
for sublist in a:
if sublist is not None: # filter out None items
print(*sublist, file=fp)
my_file.txt的内容:
123
4 5 6
7 8 9
这不会将任何None
项打印到文件中。如果您确实打算删除空列表,那么您可以只写:
if sublist:
print(...)
您是否考虑过使用内部循环的另一个循环?如果必须使用明文格式,我会考虑使用例如。没有理由重新发明轮子:)@kazemakase,好吧,这很好。我现在就试试,如果我做不到,我就写在这里。非常感谢。也许我错过了什么,但这工作对你来说不是吗<代码> JSON.DUMPER()/代码>将创建一个很好的文件,并且您可以根据需要调整格式。您是否考虑过使用内部循环的另一个循环?如果必须使用明文格式,我会考虑使用例如。没有理由重新发明轮子:)@kazemakase,好吧,这很好。我现在就试试,如果我做不到,我就写在这里。非常感谢。也许我错过了什么,但这工作对你来说不是吗json.dump()
将创建一个很好的文件,您可以根据需要调整格式。@这是最有效的方法。有没有一种简单的方法可以在单独的行上写入文件?假设我有3个子列表,如何得到3行每行包含1个子列表?或者它不能按我想象的方式工作?pickle格式是二进制的,不“人眼友好”。你为什么关心行等?有没有人会读这个文件?完全理解。我想阅读它,看看我是否没有犯任何错误,也就是说,文件是按照我的预期创建的。但我可以通过简单地读回-->来实现这一点,如果加载文件后print()的输出不好,那么该文件就不能像我预期的那样使用。@velenos14这是最有效的方法。有没有一种简单的方法可以在单独的行上写入该文件?假设我有3个子列表,如何得到3行每行包含1个子列表?或者它不能按我想象的方式工作?pickle格式是二进制的,不“人眼友好”。你为什么关心行等?有没有人会读这个文件?完全理解。我想阅读它,看看我是否没有犯任何错误,也就是说,文件是按照我的预期创建的。但我可以通过简单地读回-->来实现这一点,如果加载文件后print()的输出不好,那么该文件就不会像我预期的那样使用。这比使用print更容易,因为当您从文件加载回数据时,您不必迭代这些行并将它们拆分为一个空格来重新创建列表。在处理不可信数据时,它也比pickle更安全。阅读Python文档中的警告:它也是一种通用数据格式,而pickle是特定于Python的。它比使用print更容易,因为当您从文件加载回数据时,您不必迭代这些行并将它们拆分为一个空格来重新创建列表。在处理不可信数据时,它也比pickle更安全。阅读Python文档中的警告:它也是一种通用数据格式,而pickle是特定于Python的。