快速找出两列表中的相同元素;二分法搜索;回文算法

l1 = [3,4,2,15,6,1,9]
l2 = [23,1,3,4,23,1,9,15]
#找出两列表的相同元素
l11 = sorted(list(set(l1)))    #首先将list转化为set,消除自身的重复值,因为set无序,再次变为list
l22 = sorted(list(set(l2)))    #然后对列表进行排序操作,该操作会在之后减少计算时间
l3 = []    #创建空列表用于接收相同的值
x = 0
for i in l11:    #遍历l11
    for j in range(x,len(l22)):    #j代表l22中从第x个元素到最后一个元素的值
        if i == l22[j]:    #如果相同,返回到l3
            l3.append(i)
            x = j    #将在l22中搜索的第一个值改为第j个元素
            continue
print(l3)
 
  
def binary_search(list1,item1):
    low = 0#用于跟踪查找的部分
    high = len(list1)-1
    while low < high:
        mid = int((low + high)/2)#只要范围没有缩小到只包含一个元素就检查中间的元素
        guess = list1[mid]
        if guess == item1:
            return mid
        elif guess > item1:
            high = mid - 1
        else:
            low = mid +1
    return None
list1 = [1,2,3,4,5,6]#二分法只能查找有序列表中值的位置
print(binary_search(list1,1))
#求数列中某元素大小排第几,先用sorted()函数对列表排序,然后用二分法查找输入的元素在第几位,因为默认最小为0,加一
def binary_search(list1, item1):
    list1 = sorted(list1)
    low = 0
    high = len(list1)-1
    while low < high:
        mid = int((low + high)/2)
        guess = list1[mid]
        if guess == item1:
            return mid + 1
        elif guess > item1:
            high = mid - 1
        else:
            low = mid + 1
    return None
list1 = [2,3,1,4,5,6,11]
#print()
print(binary_search(list1, 2))
 
  
#回文算法,输入一个数,首先判断是否为回文数,如果是回文数输出T
# 如果不是回文数,加上他的逆序数值(12+21=33),
# 判断结果是否为回文数,如果不是回文数带入上一步
def huiwen(x1):
    x11 = str(x1)
    x22 = x11[::-1]    #将数值x1转化为字符串变量,逆序后再变为数值得到x2,
    x2 = int(x22)      #如果x1 == x2,则是回文数
    if x2 == x1:
        print('%d是回文数!'%x1)
    else:
        print('%d不是回文数!'%x1)
        c = x1 +x2
        huiwen(c)
huiwen(23)


你可能感兴趣的:(编程)