python - 在两个索引之间迭代连接字符串python

标签 python string python-3.x nested-lists

我有一个具有以下格式的测试文件:

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/

相关文章:

python - Discord.py 打印邀请链接

python - 为什么python中的namedtuple需要一个名字?

Python。从 Pandas 列中提取字符串的最后一位

python - django.core 序列化器和 Django Rest Framework 序列化器之间的区别

PHP 生成一个唯一的字符串

c - 如何删除与说明相同行的注释?

python - 拆分 Pandas 列中的 float 列表后获取完整的小数位精度

python - 无法下载和安装 scikit-learn

python - 如何使用 BeautifulSoup 保存页面中的所有图像?

python - 将 redis 哈希转换为 python 字典?