1

给定一个整数列表,例如,x = [5, 10, 6, 12, 10, 20, 11, 22] 编写一个表达式,如果所有奇数索引值都是其先前值的两倍,则返回 True。 我们需要使用skip slicing、zip、all和list comprehension

我是 Python 编程的新手(虽然在 Java 方面有丰富的经验)。这只是关于 python 语法的一个基本问题,但我做不到。我尝试了以下方法:

list(zip(x[::2], x[1::2]))

这个表达式返回给我一个类似下面的列表 [(5, 10), (6, 12), (10, 20), (11, 22)]

在此之后,我失去了如何检查对的条件。寻找类似的东西

print(all([False for pair in list(zip(x[::2],x[1::2]))]) "write something in proper format that checks pair values for double condition")

4

3 回答 3

3

使用 Zip、切片和列表理解

x = [5, 10, 6, 12, 10, 20, 11, 22]
all([b == 2*a for a, b in zip(x[::2], x[1::2])])  # True

解释

数字对生成器

zip(x[::2], x[1::2]) # produces [(5, 10), (6, 12), (10, 20), (11, 22)]

循环遍历元组(设置为 a, b)

for a, b in zip(x[::2], x[1::2]) 

检查条件

b == 2*a   # second number is twice 1st

检查是否处处为真

all(...)
于 2020-09-23T19:37:52.823 回答
2

这个?

x = [5, 10, 6, 12, 10, 20, 11, 22]
result = all(x2 == 2*x1 for x1,x2 in zip(x[::2],x[1::2]))
print(result) # True
于 2020-09-23T19:37:20.090 回答
1

这个怎么样:

In [123]: x
Out[123]: [5, 10, 6, 12, 10, 20, 11, 22]

In [124]: all([x[i]/x[i-1]==2 for i in range(1, len(x) - 1, 2)])
Out[124]: True
于 2020-09-23T19:32:59.713 回答