2015-05-11 2 views
1

Я это небольшая проблема в Python при использованииСтроки перед R не отображается

print ",".join(array) 

Например, при использовании array=['dog\r', 'monkey', 'pig'] выход выглядит следующим образом:

,monkey,pig 

Любые идеи?

Одобренные ванты код istself выглядит следующим образом

a = raw_input(">>") 
uAlpha = a.split(",") 

Теперь я знаю, как удалить/г, но, как предотвратить его попадание туда в первую очередь?

+0

Простой: просто снимите возврат каретки. –

+0

Проблема в том, что этот новый массив создается при расщеплении вывода, а python добавляет/r к последней строке в массиве. Любой способ предотвратить это автоматически? – ign699

+1

Python не делает этого, он не просто добавляет символы '\ r' без причины. Можете ли вы показать нам, как вы получили вход в первую очередь? –

ответ

8

\r является символом возврата каретки, поэтому он делает именно то, что должен. Строка на самом деле dog\r,monkey,pig, но когда вы ее печатаете, она выглядит как ,monkey,pig из-за того, что делает \r (перемещает курсор в начало строки). Попробуйте раздеться возврат каретки (и любой другой пробел) из строк:

>>> array=['dog\r', 'monkey', 'pig'] 
>>> ",".join(s.strip() for s in array) 
dog,monkey,pig 

В качестве альтернативы, если вы вывесили свой код, мы могли бы быть в состоянии помочь вам получить «\ г» от того, на там, в первую очередь.

3

Вы включаете возврат каретки в свою строку. Вы инструктируете терминал переместить курсор обратно в начало строки и продолжить печать оттуда.

Вы построили строку:

'dog\r,monkey,pig' 

и печать, что, в результате чего в первом dog печатается, то курсор двигается обратно в начало строки (возвращающего «печатной каретки»), то остальные печатаются , переписывая dog текст.

Либо удалите возврат каретки с вашего ввода, либо из вашей объединенной строки. Вы можете использовать str.replace() или str.translate() для удаления всех символов возврата каретки или использовать str.strip() (и варианты), чтобы удалить их из начала и конца строки, когда у вас все еще есть список.

Например, если ваш вход поступает из raw_input(), вы могли бы просто использовать str.rstrip() удалить возврат каретки с конца:

a = raw_input(">>").rstrip('\r') 
uAlpha = a.split(",") 
2

Ответный персонаж заставляя его пропустить первую часть, вы можете увидеть разница с помощью repr

>>> print ",".join(array) 
,monkey,pig 
>>> print repr(",".join(array)) 
'dog\r,monkey,pig' 

map использование и strip, чтобы удалить символ возврата

>>> array=['dog\r', 'monkey', 'pig'] 
>>> ",".join(map(str.strip,array)) 

Выход

'dog,monkey,pig' 

Обратите внимание, что это немного лучше использовать map, а не понимания раздеться символов.В timeit результатах

$ python -m timeit "','.join(s.strip() for s in ['dog\r', 'monkey', 'pig'])" 
1000000 loops, best of 3: 1.18 usec per loop 
$ python -m timeit "','.join(map(str.strip,['dog\r', 'monkey', 'pig']))" 
1000000 loops, best of 3: 0.647 usec per loop 

Использование map против постижений обсуждаются здесь.

Самый популярный (и принял ответ) заключение цитируется here:

карта может быть микроскопически быстрее в некоторых случаях (когда вы не делаете лямбда для этой цели, но с использованием та же самая функция на карте и listcomp).

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