Вложенный список python и обрезка строк в операторе for

Теперь, имея список списков с двумя строками:

l1 = [['a', 'www.apple.com/a www.google.com www.yahoo.com'],
    ['b', 'www.apple.com/sm www.sashgh.com www.uensg.com'],
    ['c', 'www.apple.com/oths www.zhiut.com'],
    ['d', 'www.amazon.com www.toronto.com']]

Я хочу сохранить первую строку и получить URL-адрес «apple.com» во второй строке или, если «apple.com» отсутствует, указать None (например, в случае «d»):

l2 = [['a', 'www.apple.com/a'], 
    ['b', 'www.apple.com/sm'],
    ['c', 'www.apple.com/oths'],
    ['d', None]]

Я пробовал это:

l2 = []
for l in l1:
    for url in l[1].split(' '):
        if 'apple.com' in url:
            l2.append([l[0], url])
            break
        else:
            l2.append([l[0], None])
            break

и код теперь работал!

Можешь объяснить, что ты имеешь в виду под "очень плохо"?

Scott Hunter 28.03.2022 17:33

Ваш внутренний цикл должен быть for url in l[1].split(' ') (не l1[1]), и аналогично в операторах append. В нынешнем виде вы получите много записей в l2 с None второй записью — вам понадобится флаг для проверки любых l2 записей по заданному l1 и заключительному действию. Я также рекомендую НЕ использовать l в качестве имени переменной.

Joffan 28.03.2022 17:35

@ScottHunter спасибо, я ошибся в коде, но это был 1 шаг к успеху

Richard Fan 28.03.2022 17:41

@Joffan Спасибо за совет! Что бы вы использовали для списка? в моем случае элемент во внешнем списке также является списком, поэтому я использую l

Richard Fan 28.03.2022 17:48

@RichardFan «список» - это структура. Название было бы лучше, если бы оно описывало содержимое. Обратите внимание, что ваше обновление в вопросе будет работать только в тех случаях, когда «apple.com» встречается в первом элементе, разделенном пробелом.

Joffan 28.03.2022 19:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы добавляете только первые apple.com в разделяемые строки во вторых элементах подсписков, вы можете использовать next и выражение генератора для извлечения первых apple.com.

out = [[first, next((s for s in second.split() if 'apple.com' in s), None)] for first, second in l1]

Выход:

[['a', 'www.apple.com/a'],
 ['b', 'www.apple.com/sm'],
 ['c', 'www.apple.com/oths'],
 ['d', None]]

Другие вопросы по теме