在 python 中使用列表理解在连续的行上输入
Taking inputs on consecutive lines using list comprehension in python
我想连续取两行作为输入,其中第一行是我的数组,第二行是我要使用二进制搜索来搜索的元素。但是,在输入两条线后,它需要更多的线并且不能按预期工作。
def my_bin(a, key):
l = 0
h = len(a) - 1
loc = -1
while(l < h):
m = l + (h - l) // 2
if (a[m] == key):
loc = m
elif (key < a[m]):
h = m
elif(key > a[m]):
l = m + 1
return loc
if __name__ == '__main__':
a = [int(x) for x in input().split()]
ktf = [int(x) for x in input().split()]
ktf = ktf[1:]
a = sorted(a)
for ele in ktf:
t = my_bin(a, ele)
print(t, end=" ")
示例:
线 1:7 8 6 546 878 98 34 543
第 2 行:4 6 7 8 786
输出:
0 1 2 -1
第一行是要排序查找的数组。
第二行的第一个值是要搜索的值的数字,这里是“4”,之后是要在上面的数组中搜索的值。
问题不在于输入。 my_bin
中的 while 循环不会终止,因为只有 if and elif
如果它不匹配任何条件,它将处于非终止循环中。
我想连续取两行作为输入,其中第一行是我的数组,第二行是我要使用二进制搜索来搜索的元素。但是,在输入两条线后,它需要更多的线并且不能按预期工作。
def my_bin(a, key):
l = 0
h = len(a) - 1
loc = -1
while(l < h):
m = l + (h - l) // 2
if (a[m] == key):
loc = m
elif (key < a[m]):
h = m
elif(key > a[m]):
l = m + 1
return loc
if __name__ == '__main__':
a = [int(x) for x in input().split()]
ktf = [int(x) for x in input().split()]
ktf = ktf[1:]
a = sorted(a)
for ele in ktf:
t = my_bin(a, ele)
print(t, end=" ")
示例:
线 1:7 8 6 546 878 98 34 543
第 2 行:4 6 7 8 786
输出: 0 1 2 -1
第一行是要排序查找的数组。 第二行的第一个值是要搜索的值的数字,这里是“4”,之后是要在上面的数组中搜索的值。
问题不在于输入。 my_bin
中的 while 循环不会终止,因为只有 if and elif
如果它不匹配任何条件,它将处于非终止循环中。