Теперь, имея список списков с двумя строками:
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
и код теперь работал!
Ваш внутренний цикл должен быть for url in l[1].split(' ') (не l1[1]), и аналогично в операторах append. В нынешнем виде вы получите много записей в l2 с None второй записью — вам понадобится флаг для проверки любых l2 записей по заданному l1 и заключительному действию. Я также рекомендую НЕ использовать l в качестве имени переменной.
@ScottHunter спасибо, я ошибся в коде, но это был 1 шаг к успеху
@Joffan Спасибо за совет! Что бы вы использовали для списка? в моем случае элемент во внешнем списке также является списком, поэтому я использую l
@RichardFan «список» - это структура. Название было бы лучше, если бы оно описывало содержимое. Обратите внимание, что ваше обновление в вопросе будет работать только в тех случаях, когда «apple.com» встречается в первом элементе, разделенном пробелом.






Поскольку вы добавляете только первые 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]]
Можешь объяснить, что ты имеешь в виду под "очень плохо"?