У меня есть следующая строка:

This is example of a string which is longer than 30 characters

Его длина составляет 62, и я хочу ограничить его до 30. Таким образом, результатом простой my_string [: 30] будет:

This is example of a string wh

И я хотел бы получить:

This is example of a string

Итак, я придумал следующий код:

def func(my_string):
    if len(my_string) > 30:
        result_string = []
        for word in my_string.split(" "):
            if len("".join(title)) + len(word) <= 30:
                result_string.append(word)
            else:
                return result_string
    return my_string

Мой код работает, однако я продолжаю думать, есть ли лучший и более чистый способ сделать это.

2
Adam Harmasz 2 Июл 2019 в 13:31

3 ответа

Лучший ответ

Вы можете упростить код:

  • Первое утверждение if можно избежать. Когда вы нарезаете строку вроде: my_string[: index], не имеет значения, если индекс больше, чем размер строки.
  • Тогда вам просто нужно проверить, является ли символ, где вы вырезали строку, пробелом или нет. Если это не так, вам нужно найти предыдущее место. Вы можете сделать это с помощью метода rfind (найдите индекс с конца).

Вот код:

def slice_string(text, size):
    # Subset the 'size' first characters
    output = text[:size]
    if len(text) > size and text[size] != " ":
        # Find previous space index
        index = output.rfind(" ")
        # slice string
        output = output[:index]
    return output

text = "This is example of a string which is longer than 30 characters"

print(slice_string(text, 30))
# This is example of a string

Вот один вкладыш, который работает во всех случаях, если n>0:

3
Alexandre B. 2 Июл 2019 в 11:19

Вот один вкладыш, который работает во всех случаях, если n>0:

def limit(s,n): return s[:n-1-(s+" ")[n-1::-1].find(" ")]

Контрольная работа:

for n in range(1,34): print(n,limit(s,n))

1 T
2 Th
3 Thi
4 This
5 This
6 This
7 This
8 This is
9 This is
10 This is
11 This is
12 This is
13 This is
14 This is
15 This is
16 This is example
17 This is example
18 This is example
19 This is example of
20 This is example of
21 This is example of a
22 This is example of a
23 This is example of a
24 This is example of a
25 This is example of a
26 This is example of a
27 This is example of a
28 This is example of a string
29 This is example of a string
30 This is example of a string
31 This is example of a string
32 This is example of a string
33 This is example of a string
0
B. M. 2 Июл 2019 в 11:42

Это один из подходов.

< Сильный > Пример:

s = "This is example of a string which is longer than 30 characters "
def func(my_string):
    result = ""
    for item in my_string.split():                 #Iterate each word in sentence
        temp = "{} {}".format(result, item).strip() #Create a temp var
        if len(temp) > 30:                          #Check for length
            return result
        result = temp
    return result

print(func(s))  #This is example of a string
3
Rakesh 2 Июл 2019 в 10:43