我被问到一个面试问题来反转阵列。我使用了以下方法,它按预期工作:
def reverse(array, i, j):
if i > j: # ensure i <= j
i, j = j, i
while i < j:
array[i], array[j] = array[j], array[i]
i += 1
j -= 1
现在,面试官要我用for替换上面的while循环,我真的很困惑。请有人帮帮我。提前谢谢。
答案 0 :(得分:3)
这不是for,但你也可以这样做:
如果你遵循python逻辑,其中[i:j]表示i&lt; = x&lt; j然后你可以这样做:
array[i:j] = array[j-1:i-1:-1]
其他方式,如果您想获得i&lt; = x&lt; = j的元素,那么您可以像@darksky建议的那样:
array[i:j+1] = array[j: i - 1: -1]
答案 1 :(得分:1)
此处的其他答案以非常智能的方式执行此操作,但for
循环应如下所示:
for x in range(j - i):
array[i+x], array[j-x] = array[j-x], array[i+x]
答案 2 :(得分:1)
您可以完全忘记for
循环,并执行以下操作:
def reverse(array, i, j):
# Make sure i is less than j
if i > j:
i, j = j, i
# Reverse array[i:j+1]
section = array[i:j+1]
section.reverse()
array[i:j+1] = section
(j+1
是为了与您的功能行为保持一致; i
和j
都被视为包容性,但Python需要[包含,独占]。)
或者如果你想保持for
循环并避免使用标准函数,那么你可以这样做:
def reverse(array, i, j):
# Make sure i is less than j
if i > j:
i, j = j, i
# Reverse array[i:j]
count = j - i + 1
for offset in range(0, count // 2):
first = i + offset
second = j - offset
array[first], array[second] = array[second], array[first]
答案 3 :(得分:0)
我认为更可读的例子是:
expected: nil
got: #<RegularPrice id: 2, label: nil, currency: "CHF", selling_price: 200.0, priceable_type: "Service", p...ated_at: "2017-07-13 08:08:47", quantity: 1, type: "RegularPrice", position: 1, purchase_price: nil>