我正在从头开始练习Python。我的代码中有两个问题。
代码是将列表中的所有数字相乘。
代码:
str1=input("Enter your little string: ")
list1=str1.split()
print(list1)
int_list=[int(list1[int(x)]) for x in range(0, len(list1)) if str.isdigit(list1[int(x)])]
x=1
int_list=[(x:=x*n) for n in int_list]
print(int_list)
print (x)
对于列表 ['1', '2', 'Hello', '3' , '4'] 输出为:
Enter your little string: 1 2 Hello 3 4
['1', '2', 'Hello', '3', '4']
[1, 2, 6, 24]
24
问题 1:请注意,在代码的第 4 行中,我从
range(0, len(list1))
进行迭代,而不是 (
range(0, len(list1)-1)
因为没有 -1,x 的输出是正确的;并且有 - 1 它以某种方式不计算列表的最后一个元素。为什么会这样?
问题 2:你看,我正在使用列表理解来创建一个新列表(我根本不想要或不使用它)。虽然我打印“x”作为我想要的输出,但我可以做类似的事情而不创建不必要的列表并将值直接存储在“x”中吗?:D(idk,我是Python新手)才过了3天)
你做得很好,能够识别代码中的冗余并寻求改进,这是非常棒的!以下是你的问题的答案以及如何优化代码的方法:
问题 1:
range(0, len(list1))
是正确的。在 Python 中,
range(start, stop, step)
会生成从
start
(包含)到
stop
(不包含)的一系列数字。因此,
range(0, len(list1))
会生成从 0 到
len(list1)-1
的数字,这正是你迭代列表所有元素所需的范围。如果你使用
range(0, len(list1)-1)
,你实际上会跳过列表的最后一个元素。
问题 2:
是的,你绝对可以不用创建不必要的列表来实现你的目标!你可以直接在一个循环中计算数字的乘积,并将结果存储在
x
中。
以下是你的代码的优化版本:
str1 = input("Enter your little string: ")
list1 = str1.split()
print(list1)
x = 1
for item in list1:
if item.isdigit():
x *= int(item)
print(x)
在这个版本中:
-
我们遍历了分割后的输入字符串
list1
中的每个项目。 -
对于每个项目,我们使用
.isdigit()
方法检查它是否是数字。 -
如果它是数字,我们将其转换为整数并乘以
x
,有效地累积了乘积。
此方法避免了创建不必要的列表,并使代码更易读和高效。
标签:python,list,iteration,list-comprehension From: 78819689