2010-03-11 2 views
2
line = "english: while french: pendant que spanish: mientras german: whrend " 

words = line.split('\t') 

for each in words: 
each = each.rstrip() 

print words 

строка в «строке» является табуляцией, но также имеет один белый символ пробела после каждого переведенного слова, так в то время как раскол возвращает список я после, каждое слово раздражающе имеет символ пробела в конце строки.Операции над элементами списка питон

в цикле Я пытаюсь пройти через список и удалить любые завершающие пробелы в строках, но он, похоже, работает, предложения?

ответ

2

Только line.split() может дать вам список слов с раздевающимися именами.

Обновление each внутри цикла не вносит никаких изменений в words список

Должно быть сделано как этот

for i in range(len(words)): 
    words[i]=words[i].rstrip() 

Или

words=map(str.rstrip,words) 

See the map docs Подробную информацию о карте.

Или один лайнер с пониманием список

words=[x.rstrip() for x in line.split("\t")] 

Или с регулярным выражением .findall

words=re.findall("[^\t]+",line) 
+0

в анализе данных, который, например, разделил бы французское слово «pendant que» на два слова – dave

+0

Итак, вы можете попробовать со вторым примером 'for i in range (len (words)): ...' или 'words = map (str.rstrip, words)' – YOU

+0

А, это работает, спасибо. Я вижу, что python разделяет несколько преимуществ таких языков, как haskell. В функции карты str.strip константа в этом случае? Чувствует себя нечетным без набора круглых скобок ... – dave

1
words = line.split('\t') 
words = [ i.rstrip() for i in words ] 
+0

thats хорошо. Я не понял, что python сделал список сообщений – dave

+0

, или вы могли бы даже объединить это в один лайнер. – SilentGhost

0

Вы можете использовать регулярное выражение:

import re 
words = re.split(r' *\t| +$', line)[:-1] 

С этим вы определяете возможную последовательность в качестве разделителя. Он также позволяет использовать более одного пространства из-за оператора * (или вообще никакого места).

EDIT: Исправлено после того, как Roger Pate указал на ошибку.

+1

После этого вам нужно будет удалить последнее пространство (последний символ в строке). – 2010-03-11 11:17:16

+0

Вы правы. Я починю это. –

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