LINUX.ORG.RU

Как в пайтоне из списка кортежей красиво выбрать отдельные элементы?


0

2

Задача такая: нужно получить список адресов IPv4 одного хоста. Сейчас я делаю это так:

ips = [ip for _, _, _, _, (ip, _) in socket.getaddrinfo("example.org", None, socket.AF_INET)]
Проблема в том, что socket.getaddrinfo возвращает в кортежах много не нужной мне информации, и из-за этого пришлось использовать кучу переменных-затычек «_». Как избавиться от этих затычек, чтобы покрасивее было?

Deleted

Последнее исправление: Deleted (всего исправлений: 1)

Возможно я не прав, но тут чрезмерное увлечение сахаром. Сделай на 3 строки и не парь мозг. :)

zJes ★★
()

насколько я понял возвращается кортеж типа

t = (1, 2, 3, 4, 5, 6, 7, (ip, 8))

тогда забрать ip можно как

ip = t[-1][0]

Zubchick
()
ips = [info[4][0] for info in socket.getaddrinfo("example.org", None, socket.AF_INET)]

Так наверное.

vladimir-vg ★★
()
Ответ на: комментарий от anon_666

> //щас закидают го**ом

Нормальное решение. Хотя я бы написал так, как в стартовом посте.

tailgunner ★★★★★
()

ох уж эти любители однострочники :). не усложняй, пиши проще, чтобы код можно было «читать», а не «разбирать».

Deleted
()

Код в оп-посте отличный, легкий, читаемый (в отличие от всяких [0][-1]). Ничего менять не надо, я бы сделал именно так.

переменные-затычки


Анонимные переменные ;)

tensai_cirno ★★★★★
()
Ответ на: комментарий от Deleted

Дело не в однострочниках...

просто list comprehensions объективно быстрее, чем цикл for или map (особенно если нет подходящей встроенной функции). Здесь, правда можно заменить «_» на «garbage», для тугодумов, не знающих, что это временная переменная. Хотя я бы сделал так: ips = (ip for _, _, _, _, (ip, _) in socket.getaddrinfo(«example.org», None, socket.AF_INET)) Потом, если надо, list(ips)

anonymous
()
Ответ на: комментарий от Deleted

Дело не в однострочниках...

просто list comprehensions объективно быстрее, чем цикл for или map (особенно если нет подходящей встроенной функции). А по форме записи почти тот тот же цикл for. Здесь, правда можно заменить «_» на «garbage», для тугодумов, не знающих, что это временная переменная. Хотя я бы сделал так: ips = (ip for _, _, _, _, (ip, _) in socket.getaddrinfo(«example.org», None, socket.AF_INET)) Быстрее же. Потом, если надо, list(ips)

anonymous
()
Ответ на: комментарий от Deleted

Ох уж эти любители сказать банальщину не к месту :)

balodja ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.