14 列表推导式

v8 = [lambda x:x*i for i in range(10)] # 新浪微博面试题
# 1.请问 v8 是什么?  #V8为10个匿名函数,每个函数接收一个参数
# 2.请问 v8[0](2) 的结果是什么?  #结果等于2*9 = 18

# 面试题
def num():
    return [lambda x:i*x for i in range(4)]
# num() -> [函数,函数,函数,函数]
print([ m(2) for m in num() ]) # [6,6,6,6]

# ##################### 筛选 #########################
v9 = [i for i in range(10) if i > 5]



"""
1、给你一个IP地址,请将IP地址 中的每个进制数字转换成对应二进制
2、继续实现,将结果拼接起来:11000000101010000000101100010111,再将此二进制的字符串转换成10进制整数
"""

ip = "192.168.11.23"


# 方式1
def ip_switch(ip):
    data_list = ip.split('.')  # 转换为:列表字符串[192.168.11.23]
    result = []
    for item in data_list:
        bin_string = bin(int(item)).replace('0b', '')  # 进制转换后为字符串
        if len(bin_string) % 8 == 0:
            result.append(bin_string)
        else:
            new_bin_string = (("0" * (8 - len(bin_string))) + bin_string)
            result.append(new_bin_string)
    return result


# 方式2
def ip_switch2(ip):
    result = []
    data_list = ip.split('.')
    for item in data_list:
        bin_string = bin(int(item))[2:]
        bin_8_string = bin_string.rjust(8, '0')
        result.append(bin_8_string)

    return result


# 通过列表推导式简化代码
def ip_switch3(ip):
    result = ''.join([bin(int(item))[2:].rjust(8, '0') for item in ip.split('.')])

    return result


def main():
    ip_list = ip_switch2(ip)
    str_item = ''.join(ip_list)  # 将列表中的字符串通过join 进行拼接成一起
    v2 = int(str_item, base=2)
    print(v2)

    v3 = int(ip_switch3(ip), base=2)
    print(v3)


main()

posted @ 2024-07-24 21:50  jhchena  阅读(3)  评论(0编辑  收藏  举报