列表中的重复项
我今天参加了一个测试,其中有一个问题是:写一个叫做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 个回答
你只需要遍历这个列表一次,检查每个元素和它后面的一个元素或者前面的一个元素。
下面的例子是把每个数字和它后面的一个数字进行比较,并且在倒数第二个数字时停止。
def doubles(x):
for i,a in enumerate(x[:-1]):
if x[i+1] == a*2:
print a*2
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如,有人可能在使用一个叫做“库”的东西时,遇到了错误或者不明白怎么用。这种情况很常见,尤其是对于刚开始学习编程的人来说。
当你在网上寻找解决方案时,像StackOverflow这样的论坛就非常有用。在这些地方,很多人会分享他们的经验和解决方案,帮助其他人解决类似的问题。
如果你看到有人提到“代码块”,那通常是指一些具体的代码示例,帮助你理解如何使用某个功能或解决某个问题。比如,
就是一个代码块的占位符,里面可能会有实际的代码示例。def doubles(lst):
prev = None
for actual in lst:
if prev is not None and actual == 2*prev:
print actual
prev = actual
总之,遇到问题时,不要气馁,网上有很多资源可以帮助你找到答案,慢慢来,你会越来越熟练的。
你的代码是把每个值和列表中后面的所有值进行比较。但题目要求你只考虑相邻的两个值。
所以,你只需要一次遍历这个列表。可以这样做:
def doubles(x):
for i in range(1, len(x)):
if x[i] == 2*x[i-1]:
print x[i]
而且,你的代码打印的是索引而不是实际的值,这个错误我在上面已经修正了。