Python中5 * ['th']为何生成单列表而非5个独立列表?
关于Python序列乘法的两个疑问解答
嘿,这两个问题其实都是Python里序列乘法的规则在搞事情,我给你拆解清楚:
一、为什么5 * ['th']返回的是五个'th'字符串,而非五个独立列表?
Python里的序列(列表、字符串、元组这些)乘法逻辑是:把序列中的每个元素重复N次,组成新的序列。
这里['th']是一个包含单个字符串元素的列表,当你用5 * ['th']时,Python会把列表里的那个元素(也就是字符串'th')重复5次,所以最终得到的是一个有5个'th'字符串的列表,而不是5个['th']这样的子列表。
如果你想要得到5个独立的列表(也就是每个元素都是['th']),得用列表推导式来创建新的列表对象,比如:
result = [['th'] for _ in range(5)] print(result) # 输出: [['th'], ['th'], ['th'], ['th'], ['th']]
这种写法会循环5次,每次都生成一个新的['th']列表,所以每个元素都是独立的对象。
二、5 * ['th']和[5 * 'th']的区别在哪?
这俩完全是不同的运算顺序,结果自然不一样:
5 * ['th']:先看['th']是列表,所以是列表的乘法,重复列表内的元素,得到5个'th'字符串组成的列表。[5 * 'th']:先计算括号里的5 * 'th',这是字符串的乘法,字符串乘以数字会重复字符串内容,所以5 * 'th'得到'ththththth',然后把这个长字符串放到列表里,最终得到的是一个包含单个长字符串的列表。
用代码直观对比:
print(5 * ['th']) # 输出: ['th', 'th', 'th', 'th', 'th'] print([5 * 'th']) # 输出: ['ththththth']
额外提个小知识点:如果你的列表元素是可变对象(比如空列表[]),用乘法的时候要注意——重复的是元素的引用,不是新对象。比如5 * [[]]得到的五个子列表其实是同一个对象,修改其中一个,其他都会跟着变,这也是因为序列乘法只是重复元素引用的特性哦~
内容的提问来源于stack exchange,提问作者Varuna
相关产品推荐
相关产品推荐

