列表中的重复项

-1 投票
6 回答
1857 浏览
提问于 2025-04-17 19:47

我今天参加了一个测试,其中有一个问题是:写一个叫做doubles()的函数,它接收一个整数列表作为输入,然后输出列表中那些正好是前一个整数两倍的整数,每个整数单独一行。

我不知道该怎么做,我写的代码是

def doubles(x):
    for a in range(len(x)-1):
        for b in (range(a,len(x))):
            if x[a]*2==x[b]:
                print(b)

比如说,doubles([3,0,1,2,3,6,2,4,5,6,5])会打印出2、6和4。

有人能帮我想想该怎么做吗?

6 个回答

1

你只需要遍历这个列表一次,检查每个元素和它后面的一个元素或者前面的一个元素。

下面的例子是把每个数字和它后面的一个数字进行比较,并且在倒数第二个数字时停止。

def doubles(x):
    for i,a in enumerate(x[:-1]):
        if x[i+1] == a*2:
            print a*2
1

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如,有人可能在使用一个叫做“库”的东西时,遇到了错误或者不明白怎么用。这种情况很常见,尤其是对于刚开始学习编程的人来说。

当你在网上寻找解决方案时,像StackOverflow这样的论坛就非常有用。在这些地方,很多人会分享他们的经验和解决方案,帮助其他人解决类似的问题。

如果你看到有人提到“代码块”,那通常是指一些具体的代码示例,帮助你理解如何使用某个功能或解决某个问题。比如,

def doubles(lst):
    prev = None
    for actual in lst:
        if prev is not None and actual == 2*prev:
            print actual
        prev = actual
就是一个代码块的占位符,里面可能会有实际的代码示例。

总之,遇到问题时,不要气馁,网上有很多资源可以帮助你找到答案,慢慢来,你会越来越熟练的。

1

你的代码是把每个值和列表中后面的所有值进行比较。但题目要求你只考虑相邻的两个值。

所以,你只需要一次遍历这个列表。可以这样做:

def doubles(x):
    for i in range(1, len(x)):
        if x[i] == 2*x[i-1]:
            print x[i]

而且,你的代码打印的是索引而不是实际的值,这个错误我在上面已经修正了。

撰写回答