0

タイトルと max_length が与えられた場合、タイトルを短くする最良の方法は何ですか? 私が心に留めていたことは次のとおりです。

def shorten_title(title, max_length):
    if len(title) > max_length:
        split_title = title.split()
        length = len(title)
        n = 1
        while length > max_length:
            shortened_title = split_title[:length(split_title)-n]
            n+=1
        return shortened_title
    else:
        return title
4

3 に答える 3

4
>>> shorten_title = lambda x, y: x[:x.rindex(' ', 0, y)]
>>> shorten_title('Shorten title to a certain length', 20)
'Shorten title to a'

スペースを壊すだけで十分な場合は、これで十分です。それ以外の場合は、次のような、より複雑な方法に関するいくつかの投稿があります

okm からのコメントに対処するための更新:

max_length の前にスペースが見つからないなどのエッジ ケースを処理するには、明示的に対処します。

def shorten_title2(x, y):
    if len(x) <= y:
        return x
    elif ' ' not in x[:y]:                                          
        return x[:y]
    else:
        return x[:x.rindex(' ', 0, y + 1)]
于 2012-04-24T23:38:14.173 に答える
1
def shorten_title(title, max_length):
    return title[:max_length + 1]

どのようにそのことについて?

OK、単語を分割せずに、次のようにします。

import string

def shorten_title(title, max_length):
    if len(title) > max_length:
        split_title = title.split()
        length = len(title)
        n = 1
        while length > max_length:
            shortened_title = split_title[:-n]
            n = n + 1
            length = len(string.join(shortened_title))
        if shortened_title == []:
            return title[:max_length + 1]
        return string.join(shortened_title)
    else:
        return title

ここに私が見る結果があります:

print shorten_title("really long long title", 12)
print shorten_title("short", 12)
print shorten_title("reallylonglongtitlenobreaks", 12)

really long
short
reallylonglon

コードとロジックを元のポスターと同様に保とうとしましたが、これを行うにはもっと Pythonic な方法があります。

于 2012-04-24T23:28:52.023 に答える
0
def shorten_title(title, max_length):
    title_split = split(title)
    out = ""
    if len(title_split[0]) <= max_length:
        out += title_split[0]
    for word in title_split[1:]:
        if len(word)+len(out)+1 <= max_length:
            out += ' '+word
        else:
            break
    return out[1:]

それを試してください:)

于 2012-04-24T23:39:18.647 に答える