2016-12-03 5 views
0

У меня есть список кортежейудалить запятые из кортежей в списке

items = [('Abkhazian',), ('Afar',), ('Afrikaans',), ('Albanian',), ('Amharic',), ('Arabic',), ('Armenian',), ...] 

и хотите сделать его

['Abkhazian', 'Afar', 'Afrikaans', 'Albanian', 'Amharic', 'Arabic', 'Armenian', ... ] 

В настоящее время единственное решение я нашел следующее

items = [str[i] for item in items] 
for i in range(len(items)): 
    items[i] = items[i].replace("[","") 
    items[i] = items[i].replace("(","") 
    items[i] = items[i].replace("'","") 
    items[i] = items[i].replace(",","") 
    items[i] = items[i].replace(")","") 
    items[i] = items[i].replace("]","") 

Я чувствую, что должен быть лучший способ

ответ

4

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

Если вам нужно не одинарные кортежи элементов в списке и, вместо этого, иметь их в качестве записей строки, просто использовать список понимание:

res = [item[0] for item in items] 

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

print(res) 
['Abkhazian', 'Afar', 'Afrikaans', 'Albanian', 'Amharic', 'Arabic', 'Armenian'] 

Вы фактически получаете хорошую скорость вверх с @ скользкой распаковкой альтернативой ShadowRanger в:

res = [item for item, in items] 

может показаться как опечатка, но он получает работу.

+0

спасибо, что это отлично работает – thewizoid

+1

Тривиальное отклонение (может быть быстрее для больших входов, нажимая больше работы на слой C, не тестировалось): 'from operator import itemgetter' в верхней части файла, сделать' list (map (itemgetter (0), items)) '(можно опустить« list' wrapping on Py2). Или понимание списка вариантов, которое гарантирует, что у вас действительно есть только один элемент в каждой распаковке последовательности 'tup'',' [item for item, in items] '; протестировал это на 20% ниже, чем на Python 3.5 (индексирование на Python на удивление медленное), и оно должно быть быстрее независимо от того, насколько велики или маленькие «элементы». – ShadowRanger

0

На более вещий стороне, вы можете разархивировать список:

items = list(list(zip(*items))[0]) 
+2

Использование 'zip' для отмены одного элемента' tuple 'не является« Pythonic ». Это работает, но называть его Pythonic - это растяжка. – ShadowRanger

0

результат = [я [0] для я в деталях] печати (результат)

ничего фантазии и без запятых, что выглядят как опечатки

Смежные вопросы