Python 如何打开列表列表?
这可能是一个重复的问题,但我想知道是否有一种方法可以解包列表并从解包的结果中生成变量?我在文件中有如下数据:Python 如何打开列表列表?,python,list,argument-unpacking,Python,List,Argument Unpacking,这可能是一个重复的问题,但我想知道是否有一种方法可以解包列表并从解包的结果中生成变量?我在文件中有如下数据: '[416213688, 422393399, 190690902, 81688],| [94925847, 61605626, 346027022],| [1035022, 1036527, 1038016]' 所以我打开一个文件,把它列成一个列表 with open ('data.txt', "r") as f: a = f.read() a = a.split("|") p
'[416213688, 422393399, 190690902, 81688],| [94925847, 61605626, 346027022],| [1035022, 1036527, 1038016]'
所以我打开一个文件,把它列成一个列表
with open ('data.txt', "r") as f:
a = f.read()
a = a.split("|")
print(*a)
输出:
[4162136884223933919069090281688],[9492584761605626346027022],[103502210365271038016]
这是我的程序下一步需要的输出。
但是我不能将这个结果作为进一步使用它的变量。它给了我一个语法错误:如果我尝试:
a = (*a)
我试着使用zip
,但它给了我错误的输出,与问题中描述的类似
那么,是否有任何方法可以解压缩列表列表并获得如下输出:
[1st list of variables], [2nd list of variables], [etc...]
如果我使用itertools,我会得到:
l = list(chain(*a))
Out: ['[', '4', '1', '6', '2', '1', '3', '6'...
这不是必需的
因此,工作选择是:
下面是一种将字符串解析为二维网格(即:一个列表,它本身包含一个整数列表)的快速而肮脏的方法:
让我们从原始输出开始(我只是手动生成字符串,但这相当于read方法)
现在这只是一条长字符串。让我们把它列成一个字符串列表
a = a.split(',|')
我用了“,”而不是“|”,因为你也要去掉逗号
现在a看起来像这样:
>>> ['[416213688, 422393399, 190690902, 81688]', ' [94925847, 61605626, 346027022]', ' [1035022, 1036527, 1038016]']
这是一个看起来像数组的字符串列表。让我们把这些字符串转换成整数数组。我们能做到这一点的一个方法是使用。它所做的是将字符串作为参数,并尝试将该字符串中的任何内容解释为Python文本。它不喜欢前导空格,所以我们先用.strip()
删除它
它的作用是将a
中的每个字符串,literal\u eval
中的每个字符串放入一个列表中
这将返回所需的代码
[[416213688, 422393399, 190690902, 81688], [94925847, 61605626, 346027022], [1035022, 1036527, 1038016]]
您可以尝试类似于[x代表l代表l代表l中的x]的列表理解。Zip不会给出“不正确的输出”,您可能使用不正确。还不清楚您正试图完成什么-您的数据在一个变量中,该变量包含一个列表列表;l=列表(链(*a))
。您在寻找吗?您想做什么split()
返回一个列表。因此调用a=list(a)
是多余的。这个未打包的变量需要是一个iterable还是一行strings/ints/chars?
a = a.split(',|')
>>> ['[416213688, 422393399, 190690902, 81688]', ' [94925847, 61605626, 346027022]', ' [1035022, 1036527, 1038016]']
import ast
a = [ast.literal_eval(arr.strip()) for arr in a]
[[416213688, 422393399, 190690902, 81688], [94925847, 61605626, 346027022], [1035022, 1036527, 1038016]]