Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
26 / 26 / 5
Регистрация: 14.05.2014
Сообщений: 250

Улучшить решение

29.09.2014, 19:48. Показов 824. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
задача: Составить словарь из двух списков, которые имеют разную длину. Первый список использовать как ключи, второй как значения. Если ключам не хватило значений, в словарь следует записывать None. Значения, которым не хватило ключей, нужно игнорировать.

можно ли как то более красиво её решить, чем решил её я?


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import random
import string
def generator(listKeys,listWords):
 
    diff = len(listKeys)-len(listWords)
    if diff > 0:
        for i in range(0,diff):
            listWords.append(None)
    elif diff<0:
        listWords = listWords[0:len(listKeys)]
 
    done = dict(zip(listKeys,listWords))
    return done
 
if __name__ == "__main__":
    listKeys = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n']
    listWords = [94, 87, 92, 5, 75, 91, 60, 5]
    print("Keys more values:\nKeys: %s \nValues %s\nResult: %s\n" % (listKeys, listWords,generator(listKeys,listWords)))
 
    listKeys = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k']
    listWords = [9, 65, 18, 80, 2, 16, 81, 98, 73, 2, 88, 30, 1, 78, 92]
    print("Values more keys:\nKeys: %s \nValues %s\nResult: %s\n" % (listKeys, listWords,generator(listKeys,listWords)))
 
    listKeys = []
    listWords = []
 
    for i in range(0,random.randrange(5,15)):
        listKeys.append(list(string.ascii_lowercase)[i])
 
    for i in range(0,random.randrange(6,16)):
        listWords.append(random.randrange(0,100))
 
    print("Random:\nKeys: %s \nValues %s\nResult: %s\n" % (listKeys, listWords,generator(listKeys,listWords)))
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.09.2014, 19:48
Ответы с готовыми решениями:

Улучшить код
Написал код, хотелось бы узнать, как можно его улучшить. Буду благодарен если поможете, заранее спасибо! Код: Engine = 0 ...

Улучшить код
Подскажите пожалуйста как можно улучшить код или сократить, буду рад обратной связи class Users(): # Класс обычного пользователя ...

Основы ООП. Улучшить код текстовой игры
Здравствуйте! Не смотря на то, что я работал и с иными ЯП, где ООП более выражен, принцип ООП в решении реальных задач не всегда мне...

6
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
29.09.2014, 21:54
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from itertools import izip, izip_longest
 
def asymm_zip_to_dict_or_whatever_is_best_to_call_this(keys, values):
    if len(keys) <= len(values):
        pairs = izip(keys, values)
    else:
        pairs = izip_longest(keys, values, fillvalue=None)
    return dict(pairs)
 
# ну, или при желании   
    return dict(
        izip(keys, values) if len(keys) <= len(values)
        else izip_longest(keys, values, fillvalue=None)
        )
2
26 / 26 / 5
Регистрация: 14.05.2014
Сообщений: 250
30.09.2014, 23:00  [ТС]
Somebody,
в python3 придется без izip обойтись
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
01.10.2014, 19:27
Цитата Сообщение от tutunak Посмотреть сообщение
в python3 придется без izip обойтись
В общем-то да, но "придётся" не кажется подходящим словом, учитывая, что в 3-м Python'е zip/map - это то же, что во 2-м izip/imap.
0
8 / 8 / 0
Регистрация: 02.10.2014
Сообщений: 31
02.10.2014, 01:28
Python
1
2
3
4
5
6
7
from itertools import zip_longest
 
listKeys = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n']
listWords = [94, 87, 92, 5, 75, 91, 60, 5]
 
def make_things():
    return list(zip_longest(listKeys, listWords, fillvalue=None))
0
26 / 26 / 5
Регистрация: 14.05.2014
Сообщений: 250
02.10.2014, 10:58  [ТС]
Цитата Сообщение от ex3me0 Посмотреть сообщение
Код Python
1
2
3
4
5
6
7
from itertools import zip_longest
listKeys = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n']
listWords = [94, 87, 92, 5, 75, 91, 60, 5]
def make_things():
return list(zip_longest(listKeys, listWords, fillvalue=None))
неверно,
во первых возвращает list. нужно обернуть в
Python
1
dict(list(zip_longest(listKeys, listWords, fillvalue=None)))
во вторых если ключей меньше делает вместо них запись None (точнее - делает один ключ значением None)
0
8 / 8 / 0
Регистрация: 02.10.2014
Сообщений: 31
02.10.2014, 12:06
tutunak, да, действительно, не внимательно прочитал условие
Python
1
2
3
4
5
    
    if len(listKeys) > len(listWords):
        return dict(zip_longest(listKeys, listWords, fillvalue=None))
 
    return dict(zip(listKeys, listWords))
ну или второй вариант предложенный Somebody
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.10.2014, 12:06
Помогаю со студенческими работами здесь

Улучшить скрипт для плагина под notepad++
Есть: Всем известная программа notepad++. Под неё существует плагин для юзерских питон-скриптов. Вот этот: PythonScript ...

Выведите единственное число — максимальное количество баллов, которое смогут набрать Гоша и Тимофей
Всем привет! Недавно изучаю алгоритмические задачи на питоне, сделал одну задачу, хотел бы узнать, как её можно улучшить? (можно побольше...

ЕГЭ-2021 уменьшить или улучшить код
Можно ли как то уменьшить код или сделать лучше? ответы верные за исключением того, что придется ручками числа делить ,которые выдал питон.

Улучшить точность сегментации
Я сегментирую сердце и легкие на ренген снимках. Использую сеть FCN8. У меня есть 2000 изображений, я получаю точность 93%. Я использовал...

Улучшить качество звука (полученного с микрофона)
Есть веб-сервис, написанный на питоне. В него по вебсокету прилетают данные от клиента. Данные приходят с микрофона в строке base64, в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru