2016-04-13 3 views
2

У меня есть этот список:Дважды последний символ каждого списка строк с помощью питона

list1 = ["happy","sad","love","bad"] 

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

list2 = ["happyy","sadd","lovee","badd"] 

I попытался это:

list1 = ["happy","sad","love","bad"] 
l = len(list1)-1 
ls = len(list1[l])-1 
list2 = [] 
k=0 
i=0 
for k in list1[l]: 
    for i in list1[ls]: 
     list2.append(list1[l]+list1[ls-1]) 
print(list2) 

Я получил это:

['badsad', 'badsad', 'badsad', 'badsad', 'badsad', 'badsad', 'badsad', 'badsad', 'badsad', 'badsad', 'badsad', 'badsad ']

+1

пытались ли вы что-нибудь, показать свой код ?? – Hackaholic

+0

@Hackaholic Yea Я попробовал – Alsphere

ответ

1

Используйте представление списка. s[-1] даст вам последний символ строки s, если у него есть символы. Поэтому вы должны не указывать в пустую строку.

>>> list1 = ["happy","sad","love","bad",''] 
>>> [s + s[-1] if s else s for s in list1] 
['happyy', 'sadd', 'lovee', 'badd', ''] 

Альтернатива:

>>> [s + s[len(s)-1:] for s in list1] 
['happyy', 'sadd', 'lovee', 'badd', ''] 

Я думаю, что второй один немного лучше читать.

Edit: на самом деле, мне нравится это одна намного лучше, я не знаю, как это ускользало от меня:

>>> list1 = ["happy","sad","love","bad",''] 
>>> [s + s[-1:] for s in list1] 
['happyy', 'sadd', 'lovee', 'badd', ''] 
+0

благодарит за полезный ответ, будет использовать его , – Alsphere

+0

@Ahmed без проблем – timgeb

+0

, если я хочу этот список: list2 = ["happy sad", "sad love", "love bad"] – Alsphere

1

Чтобы просто повторить последний символ, используйте значение индекса -1 и добавьте его в строку.

>>> i = "happy" 
>>> i[-1] 
'y' 
>>> i + i[-1] 
'happyy' 

Вам не нужно перебирать список дважды. Используйте один цикл for и возьмите каждый элемент, измените строку, как показано выше, а затем добавьте ее в новый список.

Более короткий способ сделать это будет использовать понимание списка. Я позволю тебе понять, что один по своему усмотрению. :)

+1

, вы не должны прямо публиковать свой ответ, не делайте ложного кормления, здесь OP не проявили никаких усилий при решении вопроса. Stackoverflow не для кормления ложкой – Hackaholic

+1

@Hackaholic успокоиться бросить – Alsphere

+0

Я холодный брат, но я просто говорю, если мы прямо опубликуем ответ, у другого не получится узнать – Hackaholic

2

В Python вы можете использовать нарезку для этого.

list1 = ["happy","sad","love","bad"] 
list2 = [] 
for l in list1: 
    list2.append(l+l[-1]) 

print(list2) 
1

Вот короткий фрагмент кода, который делает то, что вы ищете (с помощью Python 3.3):

myList = ["happy","sad","love","bad"] 
for i in range(len(myList)):   
    myList[i] = myList[i]+myList[i][-1] 
print myList 

Хитрость это с помощью [-1] индексировать строки, начиная с право. Итак, "happy"[-1] = "y". Затем я конкатенировал исходную строку с последней буквой той же строки, чтобы получить результат. Конечно, есть много, много других (и лучших) способов сделать это, но это то, что сразу же появилось у меня в голове. Надеюсь, поможет!

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

+0

отличный ответ – Alsphere

0

нам нужно назначить счетчик для list1 скажем х последняя буква каждого будет будет х [-1] , если нам нужно снова напечатать список, мы должны создать цикл

list2 = [x + x[-1] for x in list1] 
print(list2) 
1

Учитывая код:

list1 = ["happy","sad","love","bad"] 
l = len(list1)-1 
ls = len(list1[l])-1 

l и ls являются индексы для списка, а не строки внутри списка. Таким образом, у вас были такие, как sadbad. Цикл по списку, чтобы получить каждую строку:

for s in list1: 
    print s, s[-1] # s[-1] is the last char of str 

>> happy y 
>> sad d 
... 

и манипулировать на каждой строке:

list2 = [] # final result 
for s in list1: 
    ss = s + s[-1] # concatenate the last character 
    list2.append(ss) 

list2 будет то, что вам нужно.

Конечно, список понимание будет полезно:

# single line that equivalent to above four lines 
list2 = [s+s[-1] for s in list1] 
Смежные вопросы