Python — Как мне разделить массив на несколько массивов после того, как первый массив достигнет 1900 символов?

#python #arrays #split

#python #массивы #разделить

Вопрос:

У меня есть переменная finalmessage , и если она превышает 1900 символов, мне нужно ее разделить. Я попытался определить фрагменты, но ничего не получилось. Я также использую discord.py . Соответствующий код прилагается.

Вот код в виде текста:

 @client.command(name="draw", brief="Use W and B to draw, use period to go to the next line")
async def draw(ctx, drawmessage: str):
    drawfinalmessage = []
    messagelen = 0

    for char in drawmessage:
        if char == "B":
            drawfinalmessage.append(str(B))
        elif char == "W":
            drawfinalmessage.append(str(W))
        elif char == "R":
            drawfinalmessage.append(str(R))
        elif char == ".":
            drawfinalmessage.append("n")
    finalmessage = ''.join(drawfinalmessage)
    if len(finalmessage) <= 2000:
        await ctx.send(finalmessage)
    else:
        await ctx.send("Message too long. It has to be ~100 characters or less.nBecause Discord Emojis vary in string sizes, it may be more or less than 100.")
 

Комментарии:

1. Пожалуйста, добавьте свой код в свой вопрос в виде текста. Это облегчает другим опробовать ваш код и помочь вам.

2. Хорошо, я это сделаю!

3. Почему можно отправлять до 2000 символов, но в альтернативном сообщении говорится, что предел составляет около 100? Какого размера вы хотите, чтобы разделенное сообщение было? Кроме того, что такое переменные B W и R ?

Ответ №1:

Итак, вот общая идея:

 test = ['g', 'g', 's', 'r', 't', 'a', 'a', 'b']
new_list = []
blank = []
limit = 3

for index, letter in enumerate(test):
    if not (index   1) % limit:
        blank.append(letter)
        new_list.append(blank)
        blank = []
    elif index   1 == len(test):
        blank.append(letter)
        new_list.append(blank)
        blank = []
    else:
        blank.append(letter)
 

Очевидно, я переименовал переменные, которые вы используете, но, по сути, просто поменял местами то, что вам нужно (т. Е. Ваш предел должен быть 1900, тест — это ваше drawfinalmessage)

Комментарии:

1. Мой код просто разбивает весь ваш список «drawfinalmessage» на отдельные списки с длиной «limit». Вам все равно придется перебирать каждый из этих отдельных списков и объединять их.

2. Повезло с этим?