Змея / Говнокод #28422 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
words = ['Broom', 'Being', 'Boring', 'Breeding', 'Dreaming', 'Doing', 'Dancing', 'Drinking',
     'Freezing', 'Falling', 'Flooding', 'Fearing', 'Saying', 'Sleeping', 'Standing',
     'Screaming', 'Running', 'Reading', 'Rolling', 'Rushing', 'Twerking', 'Telling']

def make_rows(row_size: int) -> list:
    row_size = abs(int(row_size)); index = 0; amount = len(words)
    # Найти кол-во групп / Calculate the amount of sublists
    if row_size>amount: row_size=amount
    if row_size > 0:
        subs = (amount // row_size) + 1 if amount % row_size > 0 else amount // row_size
        print(f'Слов: {len(words)} | | Ячеек: {subs}\n')
        # Создать найденное кол-во групп / Create the found amount of sublists
        rows = [[] for i in range(subs)]
        for x in range(amount):
            rows[index].append(words[x])
            if len(rows[index]) == row_size: index += 1
        return rows
    else: return words
        
print(make_rows(2))

Запостил: rockkley94 rockkley94, (Updated )

Комментарии (19) RSS

  • Хм. Зачем x in range(amount), если можно сразу word in words?
    Упростил:
    def make_rows(row_size: int) -> list:
        amount = len(words)
        row_count = ((amount - 1) // row_size) + 1
    
        return [ words[ i * row_size : (i+1) * row_size] for i in range(row_count) ]

    Можно ещё 2-3 строки потратить на валидацию ввода, если хочется.
    Ответить
    • зачем массив когда есть линивый лист камприхежын
      Ответить
    • def make_rows(row_size: int) -> list:
          return [words[i:i+row_size] for i in range(0, len(words), row_size)]

      Или я чего-то не догоняю?
      Ответить
  • Сократил:
    import more_itertools
    
    
    def make_rows(row_size: int) -> list:
        return list(more_itertools.chunked(words, row_size))
    Ответить
    • Типы можно не указывать, так что ещё можно сократить.
      Ответить
    • Блять, как же режет глазах чтение скриптоговна, после долгого времени работы с низкоуровневщиной! И наоборот, тоже, кстати. Даже хуже.
      Ответить
    • Усложнил:
      def make_rows(row_size: int) -> list:
          return list(zip(*[iter(words)] * row_size)) + [(tuple(words[len(words) - (len(words) % row_size):]))]
      Хотел короче сделать, но оказывается зип откидывает оставшийся хвостик. Ну не пропадать же добру!
      Ответить
      • Можно зип_лонгест, но он пудет баддить огрызок чем-нибудь
        Ответить
    • Можно и импортозамещением:
      def make_chunks(lst: list, n: int):
      result = []
      for i in range(0, len(lst), n):
      res.append(lst[i:i + n])
      return result
      Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8