如何用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的。