我想创建像A1,B2,C3和D4这样的名字
batches = zip('ABCD', range(1, 5))
for i in batches:
batch = i[0] + str(i[1])
print(batch)
这将产生预期的输出:
A1
B2
C3
D4
但是,如果我将一个list batch\u list初始化为空并将每个批添加到其中,如下所示:
batch_list = []
batches = zip('ABCD', range(1, 5))
for i in batches:
batch_list += i[0] + str(i[1])
print(batch_list)
输出如下:
['A', '1', 'B', '2', 'C', '3', 'D', '4']
为什么不呢?你知道吗
['A1', 'B2', 'C3', 'D4']
因为它将字符串视为数组。你知道吗
试试这个:
或者这个:
通过使用
+=
运算符,可以将字符串中的每个项附加到batch_list
。因此,避免断开字符串的一种方法是将其包装在一个列表中。你知道吗输出
顺便说一句,使用
list.append
和list.extend
方法通常比使用+=
更好。虽然使用+=
的代码较短,但使用这些方法会使代码更具可读性,但也有其他好处,比如可以改变全局列表,尽管有些人可能会认为无论如何都不应该这样做。;)但是有更好的方法来写这个。你知道吗
您可以使用列表理解,让
.format
方法将字母和数字结合起来,这样就不需要显式调用str
构造函数。你知道吗另一种选择是使用
enumerate
,而不是使用range
压缩。enumerate
函数允许您提供起始数字,而不是使用默认的起始数字0。你知道吗这可能是最有效的方法,除非您有Python 3.6,在这种情况下,您可以使用f字符串来进行格式化:
问题是你需要扩展列表而不是附加到列表中。Python也考虑字符串序列:
因此,
+=
将通过将左侧iterable中的每个项解压到右侧列表来扩展列表。在幕后,+=
是list.__iadd__
的语法糖:list.__iadd__
传递iterable时,具有与list.extended
相同的行为:要获得所需的行为,请改用
list.append
:相关问题 更多 >
编程相关推荐