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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (61)

我有一个测试文件,格式如下:

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)

lines list =

['one', 'two', 'three', 'four', '=', 'five', 'six', 'seven', 'eight', '=', 'nine', 'ten', 'one', 'two', '=']

然后我得到等号的索引,以便尝试在稍后使用这些索引来创建一个新列表,组合字符串:

equals_indexes = [i for i, x in enumerate(lines) if x == '=']

equals_indexes列表:

[4, 9, 14]

直到这一点,我很好。现在我想在第一个索引之前加入字符串一,二,三,四作为new_list元素1.我想加入等号1和2之间的下一组字符串,以及等号之间的下一组字符串2和3产生以下内容:

[[one two three four], [five six seven eight], [nine ten one two]]

我试图通过迭代equals索引列表,然后迭代列表行来做到这一点:

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”。我这样做是因为我有一个大文件,其中包含与程序的一次迭代相对应的大块文本。程序的迭代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循环的方式:

用户回答回答于

这是一个小IDLE示例:

>>> stuff = ['a', 'b', 'c', '=', 'd', 'e', '=', 'f', 'g']
>>> "".join(stuff).split('=')
['abc', 'de', 'fg']

它将所有字符连接在一起(因此您可以跳过将它们分成单独的列表),然后在字符上拆分该字符串=

扫码关注云+社区

领取腾讯云代金券