我有一个具有以下格式的测试文件:
one
two
three
four
=
five
six
seven
eight
=
nine
ten
one
two
=
我正在编写一个Python代码来创建一个列表,文本中的每个元素都是列表中的一个项目:
dump = sys.argv[1]
lines = []
with open(dump) as f:
for line in f:
x = line.strip()
lines.append(x)
print(lines)
行列表=
['one', 'two', 'three', 'four', '=', 'five', 'six', 'seven', 'eight', '=', 'nine', 'ten', 'one', 'two', '=']
然后,我获取等号的索引,以便稍后尝试使用这些索引来组合字符串来创建新列表:
equals_indexes = [i for i, x in enumerate(lines) if x == '=']
等于索引列表:
[4, 9, 14]
到目前为止我都很好。现在我想将第一个索引之前的字符串一、二、三、四作为 new_list 元素 1 加入。我想加入等号 1 和 2 之间的下一组字符串,以及等号之间的下一组字符串2 和 3 生成以下内容:
[[one two three four], [five six seven eight], [nine ten one two]]
我尝试通过迭代等于索引列表,然后迭代列表行来做到这一点:
for i in equals_indexes:
sequences = ""
for x,y in enumerate(lines):
if x < i:
sequences = ' '.join(lines[x:i])
groups.append(sequences)
print(groups)
产生以下结果:
['one two three four', 'two three four', 'three four', 'four', 'one two three four = five six seven eight', 'two three four = five six seven eight', ....]
我明白为什么会发生这种情况,因为在 x 的每次迭代中,它都会检查它是否小于 i,如果是,则将 x 处的每个字符串附加到字符串“sequences”。我这样做是因为我有一个大文件,其中包含与程序的一次迭代相对应的大量文本 block 。程序的迭代 1 和迭代 2 之间的分隔符是行中的单个“=”。这样,我可以在能够用等号分割列表元素后解析它们。 任何帮助都会很棒!
最佳答案
我认为这可以满足您的需求,尽管有一个部分尚不清楚。如果您想将等号之间的字符串连接为最终列表中的每个元素:
with open(dump) as f:
full_string = ' '.join([line.strip() for line in f])
my_list = [string.strip() for string in full_string.split('=') if string is not '']
print(my_list)
['one two three four', 'five six seven eight', 'nine ten one two']
如果您想要包含等号之间每个字符串的子列表,只需将上面的 my_list
替换为:
my_list = [[s for s in string.split()] for string in full_string.split('=') if string is not '']
[['one', 'two', 'three', 'four'], ['five', 'six', 'seven', 'eight'], ['nine', 'ten', 'one', 'two']]
额外的,他们使用列表推导式,这是一种更加Pythonic的循环方式:
关于python - 在两个索引之间迭代连接字符串python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51641361/