2013-10-25 2 views
3

Как бы я положил! после каждого символа в спискеПоместите символ между каждой буквой в списке строк

listOne = ["hello","world"] 

Как превратить это в:

["h!e!l!l!o","w!o!r!l!d"] 

ПОПЫТКА:

def turn(List): 
    return [i for i in (list(lambda x: "%s!" % x,listOne))] 
turn(listOne) 

Returns:

['hello!',"world!"] 

Является ли их другим способом сделайте это кроме этого:

def turn(List): 
    x = "" 
    for word in words: 
     for letter in word: 
      x += "%s!" % letter 
    return x 
turn(listOne) 

Я не большой любитель делать такие вещи, как, что, однако я понимаю, что может быть более вещий, чем то, что я пытаюсь сделать что сделать это как несколько строк, как можно так. Это возможно?

+0

Вы имеете в виду между каждым персонажем? – dansalmo

ответ

8

Вы можете легко достигнуть этого с помощью метода str.join() и list comprehension:

>>> listOne = ['!'.join(i) for i in listOne] 
>>> listOne 

Выход

['h!e!l!l!o', 'w!o!r!l!d'] 

Альтернативно, как abarnert предложил, вы можете использовать Bulit-в map функции.

>>> listOne = list(map('!'.join, listOne)) 
>>> listOne 
['h!e!l!l!o', 'w!o!r!l!d'] 

Надеюсь, что это поможет!

+0

Если вы хотите вернуть перемещение ссылок вверх, перейдите к нему; в конце концов, это ваш ответ. Просто сохраните исправленную ссылку на 'str.find' вместо' string.find'. – abarnert

+2

Еще один комментарий: так как у нас есть отлично читаемый вызов, не требующий использования 'lambda' или' partial' или что-то еще уродливое, я могу использовать 'map' здесь:' listOne = map ('!'. Join, Listone) '. Но здесь нет ничего плохого в использовании listcomp. – abarnert

+0

Ах да, этого не заметил. Благодарю. – aIKid

3
listOne = ["hello","world"] 

listTwo = ['!'.join([x for x in word]) for word in listOne] 
+1

Что такое '[x for x in word]', который нужно добавить? Он делает то же самое, что и «list (word)», но даже это не полезно, потому что строка уже является итерируемой, а 'join' уже обрабатывает ее просто отлично. – abarnert

+0

'list (word)' и 'join'ing string мне не приходило. Разве не удивительно, как много разных способов сделать что-то? – Brionius

+0

[TOOWTDI] (https://wiki.python.org/moin/TOOWTDI). За исключением случаев, когда есть два очевидных пути, конечно. ;) – abarnert

2

Как насчет этого?

["!".join(s) for s in ["hello", "world"]] 

Или более конкретно:

def turn(l): 
    return ["!".join(s) for s in l] 

Edit: Удалены обертывание строки в list(), как str.join принимает каждый Iterable объект (те, которые реализуют __iter__()), и, таким образом, строки, а также. Предоставлено @alKid.

+1

На самом деле вам не нужно указывать элемент, так как строка также является итерабельной. – aIKid

+0

@alKid Да, я заметил! Спасибо за головы. Обновлен ответ и связан с документами. Не знал, что 'str.join' принимает итерации. – nemo

+1

@nemo: Практически никому в Python не нужен 'list' специально. ('str.join' действительно имеет специальную обработку для объектов с быстрой последовательностью C-API и превращает любой другой iterable в' list' ..., но вам редко приходится это знать, а строка - объект с быстрой последовательностью .) – abarnert

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