Python 如何";适当地;打印列表?
所以我有一个清单:Python 如何";适当地;打印列表?,python,string,Python,String,所以我有一个清单: ['x', 3, 'b'] 我希望输出是: [x, 3, b] 如何在python中实现这一点 如果我使用str(['x',3',b']),我会得到一个带引号的,但我不想要引号。在Python 2中: mylist = ['x', 3, 'b'] print '[%s]' % ', '.join(map(str, mylist)) 在Python 3中(其中,print是一个内置函数,不再是语法特性): 两者都返回: [x, 3, b] 这是使用函数为mylist的每
['x', 3, 'b']
我希望输出是:
[x, 3, b]
如何在python中实现这一点
如果我使用str(['x',3',b']),我会得到一个带引号的,但我不想要引号。在Python 2中:
mylist = ['x', 3, 'b']
print '[%s]' % ', '.join(map(str, mylist))
在Python 3中(其中,print
是一个内置函数,不再是语法特性):
两者都返回:
[x, 3, b]
这是使用函数为mylist的每个元素调用str,创建一个新的字符串列表,然后将该列表加入到一个字符串中。然后,
%
字符串格式运算符替换中的字符串,而不是“[%s]”
中的%s
。下面是一个交互式会话,展示了@TokenMacGuy的一行代码中的一些步骤。首先,他使用map
函数将列表中的每个项目转换为字符串(实际上,他正在创建一个新列表,而不是转换旧列表中的项目)。然后,他使用字符串方法join
将这些字符串与,“
组合在一起。剩下的只是字符串格式,这非常简单。(编辑:此实例很简单;字符串格式通常可能有点复杂。)
请注意,使用join
是一种从多个子字符串构建字符串的简单而有效的方法,其效率远远高于通过在字符串中连续添加字符串(这需要大量幕后复制)来实现的效率
>>> mylist = ['x', 3, 'b']
>>> m = map(str, mylist)
>>> m
['x', '3', 'b']
>>> j = ', '.join(m)
>>> j
'x, 3, b'
我建议不要使用
map
,而是使用具有join
功能的生成器表达式来接受迭代器:
def get_nice_string(list_or_iterator):
return "[" + ", ".join( str(x) for x in list_or_iterator) + "]"
这里,
join
是string类str
的成员函数。它接受一个参数:一个字符串列表(或迭代器),然后返回一个新字符串,其中所有元素都由,
,连接,如果您使用的是Python3:
print('[',end='');print(*L, sep=', ', end='');print(']')
对于
表
参数,可以使用其withNone
从字符串中删除所有不需要的字符,然后使用一个字符串,该字符串包含要为其deletechars
参数删除的字符
lst = ['x', 3, 'b']
print str(lst).translate(None, "'")
# [x, 3, b]
如果您使用的是Python 2.6之前的版本,则需要使用string
模块的translate()
函数,因为直到Python 2.6才添加了将None
作为表
参数传递的功能。使用它看起来像这样:
import string
print string.translate(str(lst), None, "'")
使用
string.translate()
函数也适用于2.6+,因此最好使用它。这是一段简单的代码,如果您是新手,应该很容易理解它
mylist = ["x", 3, "b"]
for items in mylist:
print(items)
如您所愿,它不带引号地打印所有内容。仅使用打印:
>>> l = ['x', 3, 'b']
>>> print(*l, sep='\n')
x
3
b
>>> print(*l, sep=', ')
x, 3, b
使用
.format
进行字符串格式化,
mylist = ['x', 3, 'b']
print("[{0}]".format(', '.join(map(str, mylist))))
输出:
[x, 3, b]
说明:
[x, 3, b]
map
用于将列表中的每个元素映射到string
类型,
作为分隔符连接成一个字符串[
和]
来显示列表大括号我受@AniMenon的启发,写了一个更通俗的pythonic解决方案
mylist = ['x', 3, 'b']
print('[{}]'.format(', '.join(map('{}'.format, mylist))))
它只使用格式
方法。没有str
的痕迹,它允许对元素格式进行微调。
例如,如果将浮点数作为列表的元素,则可以通过添加转换说明符来调整其格式,在本例中为:.2f
mylist = [1.8493849, -6.329323, 4000.21222111]
print("[{}]".format(', '.join(map('{:.2f}'.format, mylist))))
输出相当不错:
[1.85, -6.33, 4000.21]
谢谢你,效果很好。你能详细解释一下你在第二行做什么吗?我是python新手。他正在使用
map
函数为mylist
的每个元素调用str
,创建一个新的字符串列表,然后使用str.join
将其合并为一个字符串。然后,他使用%
字符串格式操作符替换%s
中的字符串,而不是“[%s]”
。另一种可能更现代的方法是:“[{.0}”。format(,”。join(str(i)代替mylist中的i))
我倾向于使用映射(f,xs)
(或imap
,而不是(f(x)对于xs中的x)
,当f
是预定义的可调用函数时;它倾向于执行更少的字节码,并且通常更紧凑。当然不要映射(lambda x:…,xs)这比(…x in xs)
@user1767754:真的吗?Link?对Python2是一个很好的优化,因为map在2.x中返回一个列表。它在3.x中返回一个生成器,所以在那里没有太大的帮助。我会返回“,”。join(str(x)表示列表或迭代器中的x)。join(“[]”)
@eyquem:聪明,我以前从未见过像这样使用join。不过,这对初学者来说还是有点不透明(因为您使用的是字符串是一个字符串的可移植容器的属性)。唉:lst=[“它不是”,3,'b']
==>[“它不是”,3,b]
,还有lst=['it't't',3,'b']
@eyquem:是的,如果有可能的话,避免删除实际上是数据一部分的字符(而不是严格用于划界)自然需要稍微复杂/不同的逻辑。print(*L)在这里做什么?@Sandeps:看,我对此感到困惑。长数据类型是否以某种方式过滤列表?一个更简洁的版本是print(end='[');print(*l,sep='',',',end=']\n')
来解释为什么列表没有“正确”打印,print([“Sam”])
调用repr(“Sam”)
,它返回'Sam'
(带引号),这与调用print(“Sam”时不同
和python调用str(“Sam”)
,返回Sam
(不带引号)。有关更多信息,请参阅或。太好了!我发现使用.format
是最具python风格的方式。但是,我当然接受不同意见