使用
时,我在Python中遇到这个小问题print ",".join(array)
例如,使用array=['dog\r', 'monkey', 'pig']
时,输出如下所示:
,monkey,pig
有什么想法吗?
好吧,这些代码本身就是这样的
a = raw_input(">>")
uAlpha = a.split(",")
现在我知道如何删除/ r但是如何防止它首先到达那里?
答案 0 :(得分:8)
\r
是一个回车符,所以它正在做它应该做的事情。该字符串实际上是dog\r,monkey,pig
,但是当您打印它时,由于,monkey,pig
的作用(将光标移动到行的开头),它看起来像\r
。尝试从字符串中去除回车符(以及任何其他空格):
>>> array=['dog\r', 'monkey', 'pig']
>>> ",".join(s.strip() for s in array)
dog,monkey,pig
或者,如果您发布了代码,我们可能会帮助您首先让“\ r”成为您的代码。
答案 1 :(得分: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 :(得分:2)
返回字符导致它跳过第一部分,您可以使用repr
>>> print ",".join(array)
,monkey,pig
>>> print repr(",".join(array))
'dog\r,monkey,pig'
>>> 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:
在某些情况下,地图可能 显微镜 更快(当你没有为此目的制作lambda,但在地图和listcomp中使用相同的功能时)。