Как добавить определенные элементы в новый список, если определенный индекс пуст - PullRequest
0 голосов
/ 12 июня 2019

У меня есть список поставщиков и их электронные письма. Электронные письма находятся в их собственном списке, потому что у некоторых поставщиков есть больше чем одна точка контакта. Однако некоторые поставщики не ответили по электронной почте, поэтому поле для этого элемента пусто. Это выглядит так:

list1 = [['Company Name', ['companyemail@email.com']]
['Company Name', ['companyemail@email.com','companyemail@email.com']]
['Company Name', []]
['Company Name', []]]

У меня уже есть функция фильтра электронной почты, которая обнаруживает элементы, которые не имеют электронной почты, и выводит их:

for k in range(len(list1) -1, 0, -1):
    if not list1[k][1]:
        list1.pop(k)
    return list1

Однако я хочу скопировать эти элементы в новый список для инструмента-репортера, прежде чем удалить их. Поэтому я попробовал это, но всегда отмечал = [], когда это не должно.

flagged=[]
for k in range(len(list1) -1, 0, -1):
    if not list1[k][1]:
        flagged.append(k)
        list1.pop(k)
    print(flagged)
    return list1

Мои желаемые результаты будут иметь все элементы, которые не имеют электронных писем, скопированы в отмеченный список.

Ответы [ 2 ]

1 голос
/ 13 июня 2019
company_details = [
    ['Company Name A',['Company Email A']],
    ['Company Name B',['Company Email B']],
    ['Company Name C',['Company Email C']],
    ['Company Name D',[]],
    ['Company Name E',[]]
]

Использование списка понимания

no_emails = [company[0] for company in company_details if not company[1]]

print(no_emails)

выход

['Company Name D', 'Company Name E']

Использование функции

def companies_without_emails(company_details):
    '''
    This will return a list of companies
    without emails
    '''
    names = list()

    for company in company_details:
        if not company[1]:
            names.append(company[0])
    return names

print(companies_without_emails(company_details))

Выход:

['Company Name D', 'Company Name E']

Использование встроенных лямбда-функций

Мы могли бы удалить компании без электронной почты, используя это.

company_details = list(filter(lambda x: x[1],company_details))

print(company_details) 

Вывод:

[['Company Name A', ['Company Email A']], ['Company Name B', ['Company Email B']], ['Company Name C', ['Company Email C']]]
1 голос
/ 12 июня 2019

Не уверен, какой вывод вы собираетесь получить, но это вернет список названий компаний без писем

company_contacts = {'Company A': ['email1@companyA.com'],
                   'Company B': ['email1@companyB.com', 'email2@companyB.com'],
                   'Company C': []}

missing_emails = [company for company, emails in company_contacts.items() if not emails]

Вывод:

['Company C']

Использование ввода списка:

company_contacts = [['Company A', ['companyemail@email.com']],
['Company B', ['companyemail@email.com','companyemail@email.com']],
['Company C', []]]

missing_emails = [contact[0] for contact in company_contacts if not contact[1]]

Вывод:

['Company C']

Если вы хотите удалить, я бы сделал это без всплывающих окон, но создал бы два списка: один, это список компании с контактами (по сути поп) и один - это список без контактов.

company_with_contacts = []
company_without_contacts = []
[company_without_contacts.append(contact[0]) if not contact[1] else company_with_contacts.append(contact) for contact in company_contacts]

Вывод:

company_without_contacts = ['Company C']
company_with_contacts = [['Company A', ['companyemail@email.com']],
 ['Company B', ['companyemail@email.com', 'companyemail@email.com']]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...