我正在从Python中的一个文件中读取,需要创建一个列表列表。每一行是记录中的一个单独的值,每一个记录都由一个空行\n
分隔。在
rsfile = 'filepath.txt'
l_s = [[line.rstrip('\n') for line in fileinput.input([rsfile]) if line != '\n']]
这给了我每一行的值列表,并排除了\n
,但是我想在更大的列表中开始一个新的子列表或列表块。在
例如。
“1a线”
“第2a行”
“第3a行”
'\n'
“第1b行”
“第2b行”
“第3b行”
'\n'
用列表理解可以吗?最初我用这个创建了两个列表
for line in file:
if line != '\n': l.append(line)
else: l_of_l.append(l)
l = []
谢谢你的帮助!在
史蒂文
试试这样的事。。。它起作用了。 “f.txt”是您要读取的文件
你有空行来分隔应该进入每个子列表的组,对吗?假设您的输入内容不是太庞大而无法立即读入,您可以这样做:
第一个
split
给你三条线组成的组(或其他),第二个从每个组中构建一个子列表。在如果您试图将内容收集成4行一组,^{} recipes 中的
grouper
函数使其变得微不足道:这将返回iterable的iterable,尤其是
^{pr2}$izip
lazy iterator overtuple
s。如果您特别需要列表列表,则需要执行以下操作:由于配方不是标准库模块的一部分,您要么从文档中复制并粘贴函数,要么安装一个名为^{} 的第三方模块。在
如果你想要一些稍有不同的东西…好吧,在不知道你想要什么的情况下,很难确切地知道如何编码它,但是你可能会在
itertools
中找到它。在例如,假设您希望将其拆分为由空白行分隔的组。我很确定
more_itertools
中有一个函数可以为您完成这项工作,但是您可以很容易地自己编写一个函数。在首先,可以使用^{} 根据行是否都是空白来分组:
但是
groupby
返回key, group
对。您只需要group
而不需要key
。你也只需要非空行的组,而不是所有的组。在或者,如果您显式需要一个列表列表,而不是某个任意的iterable类型(在本例中,是
_grouper
lazy iterables的列表):如果您看一下
groupby
文档,这些示例实际上非常接近于此。在我可能会把
lambda line: not line.strip()
分解成一个函数(或者使用more_functools.negate(line.strip)
,或者…),然后把它写成两行或三行,而不是把它塞进一个大的列表理解中,但是如果你想要一个1行的列表理解(98个字符的行是可以接受的),这就是它。在相关问题 更多 >
编程相关推荐