你好第一次在这个论坛上提问。
我遇到了这个问题。
编写一个函数doubles()
,它将整数列表作为输入,并输出列表中的整数,该整数是列表中前一个整数的两倍,每行一个。
所以我最初尝试做的就是使用索引编写一个遍历整数列表的代码
如:
integers = []
def doubles(integers):
index = 0
while index < len(integers):
if index == (2*(index+1)):
print(index)
doubles([3,0,1,2,3,6,2,4,5,6,5])
我对我编写的代码的看法是。当索引小于整数列表的长度时,如果索引等于下一个索引的两倍,它将打印出该数字。但是,我似乎没有得到我想要的结果。谢谢。
答案 0 :(得分:2)
你正在做一些需要修复的事情。
integers
中的项目,而不是这些项目的索引。您可以通过查看integers[n]
来执行此操作,其中n是索引。integers[index]
与integers[index-1]
进行比较,而不是使用index + 1
进行比较while
循环永远不会终止。您可以执行while index < len(integers)
然后每次增加一个索引,但是更容易进行for循环。试试这个:
def doubles(integers):
index = 0
for index in range(1,len(integers)):
if integers[index] == 2*integers[index-1]:
print(integers[index])
答案 1 :(得分:0)
您可以使用:
>>> def doubles(integers):
... return [j for i,j in zip(integers,integers[1:]) if j==2*i]
...
>>> doubles([3,0,1,2,3,6,2,4,5,6,5])
[2, 6, 4]
zip(integers,integers[1:]
你可以获得所有的串联指数。
[(3, 0), (0, 1), (1, 2), (2, 3), (3, 6), (6, 2), (2, 4), (4, 5), (5, 6), (6, 5)]
答案 2 :(得分:0)
怎么样
doubles = lambda l: reduce(lambda x,y: (print(y) or y) if 2*x==y else y, l) or None
应该这样做!
答案 3 :(得分:0)
试试这样: -
(j for i, j in enumerate(integers) if integers[i] == 2*integers[i-1])
答案 4 :(得分:0)
def doubles(integers):
index = 0
for index in range(1,len(integers)):
if integers[index] == 2*integers[index-1]:
print(integers[index])
def doubles(integers):
index = 0
for index in range(1,len(integers)):
if integers[index] == 2*integers[index-1]:
print(integers[index])
def doubles(integers):
index = 0
for index in range(1,len(integers)):
if integers[index] == 2*integers[index-1]:
print(integers[index])
def doubles(integers):
index = 0
for index in range(1,len(integers)):
if integers[index] == 2*integers[index-1]:
print(integers[index])