Python中*运算符作用于列表的用途及相关代码运行疑问
对应代码
修正缩进后的可运行版本如下:
l = [] * 100 for i in range(100): l.append(i + 1) flag = 0 k = 108 for i in range(100): if k == l[i]: print("Element is present at position", i) flag = 1 break if flag == 0: print("Element is not present in the given list")
注:原代码存在缩进错误,上述版本和你实际运行的逻辑一致
问题1:l=[]*100的作用
Python中列表与整数相乘的规则是将列表内的所有元素重复整数次,空列表没有任何元素,因此[] * 100的结果仍然是空列表,这行代码等价于直接写l = [],属于完全冗余的无效代码。
原代码作者大概率是想初始化一个固定长度为100的列表,但是写法错误,如果要初始化固定长度的列表,正确写法示例为l = [0]*100。不过由于后续代码是用append方法往列表追加元素,初始为空列表也不会影响后续逻辑,因此这行错误代码没有干扰最终运行结果。
问题2:运行结果和题目答案不一致的原因
你运行得到的输出是完全正确的,逻辑推导如下:
- 循环追加
i+1时,i遍历range(100)即0到99的整数,因此列表l的最终元素是1、2、...、100,一共100个元素 - 待查找的
k值为108,显然不在1~100的范围内,因此最终输出Element is not present in the given list符合代码逻辑
题目给出的答案100是题目本身的错误,最可能的原因是题目排版时修改了参数:如果把k的值改为100,那么100在列表中对应的Python索引为99,若题目要求统计从1开始计数的位置(而非Python默认从0开始的索引),对应的位置就是100,这就是题目错误答案的来源。
内容的提问来源于stack exchange,提问作者Surya Majumder
相关产品推荐
相关产品推荐

