如何从金字塔的每一行中提取最后一个单词?

问题描述 投票:0回答:1

我的函数decode()需要从.txt文件中读取文本,将数字-单词对按数字顺序排列成三角形,并返回每行最后一个单词的字符串。

我已经成功地排列了这些对,但是当我尝试隔离每行的最后一个单词时,它会将所有单词打印到字符串中。

txt_file = ['3 love', '6 computers', '2 dogs', '4 cats', '1 I', '5 you']
def decode():
    sorted_file = sorted(txt_file)

    row = 0
    last_words_string = ''

    for i in range(len(sorted_file)):
        for j in range (0, i + 1):
            if row >= len(sorted_file):
                break
            pairs = sorted_file[row].split()
            last_word = pairs[-1]
            last_words_string += last_word + ' '
            row += 1
            print(pairs, end=' ')
        print()
    print(last_words_string)

decode()

这是我当前的输出:

['1', 'I']
['2', 'dogs'] ['3', 'love']
['4', 'cats'] ['5', 'you'] ['6', 'computers']



I dogs love cats you computers

但我需要它来表达“我喜欢电脑”。 我缺少什么想法吗?

python python-3.x sorting pyramid
1个回答
0
投票

您要获取的单词位于 三角形数 的索引上,其中如果 n 是第 m 个三角形数,则 n = m (m + 1) / 2 . 使用二次公式求解m,我们得到:

m = (sqrt(8n + 1) - 1) / 2

因此我们可以从输入列表的长度中获取三角数的项数,并迭代这些项以获取对应三角数索引处的单词:

from math import isqrt

txt_file = ['3 love', '6 computers', '2 dogs', '4 cats', '1 I', '5 you']
sorted_file = sorted(map(str.split, txt_file), key=lambda t: int(t[0]))
print(*(
    sorted_file[(n + 1) * (n + 2) // 2 - 1][1]
    for n in range((isqrt(8 * len(sorted_file) + 1) - 1) // 2)
))

输出:

I love computers

演示:https://ideone.com/0CAVyK

© www.soinside.com 2019 - 2024. All rights reserved.