函数Doubles()Python请求助手

时间:2014-10-07 18:26:29

标签: python function

你好第一次在这个论坛上提问。

我遇到了这个问题。

编写一个函数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])

我对我编写的代码的看法是。当索引小于整数列表的长度时,如果索引等于下一个索引的两倍,它将打印出该数字。但是,我似乎没有得到我想要的结果。谢谢。

5 个答案:

答案 0 :(得分:2)

你正在做一些需要修复的事情。

  1. 您希望查看列表integers中的项目,而不是这些项目的索引。您可以通过查看integers[n]来执行此操作,其中n是索引。
  2. 您希望与列表中的上一个值进行比较,而不是下一个值,因此您应该将integers[index]integers[index-1]进行比较,而不是使用index + 1进行比较
  3. 你应该循环索引列表。在此示例中,您的while循环永远不会终止。您可以执行while index < len(integers)然后每次增加一个索引,但是更容易进行for循环。
  4. 试试这个:

    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])