zip()函数以及编程题:最长公共前缀(代码简单易懂)

1.zip函数

zip()函数返回一个zip类型的对象,可以转换为list或dict

#定义列表
a = [1, 2, 3]
b = [4, 5, 6]

# 打包为元组的列表,而且元素个数与最短的列表一致
a_b = zip(a, b)
# 输出zip函数的返回对象类型
print("a_b类型%s" % type(a_b))  # 输出:a_b类型<class 'zip'>
# 输出a_b
print(a_b)             # 输出:<zip object at 0x000001F4FB05A440>,
                       # 返回了这个zip对象在内存中的存储位置

# 将a_b转换为list形式或dict形式可以观看数据
print(list(a_b))       # [(1, 4), (2, 5), (3, 6)]
# 或者转换为dict形式(此时不采取上述转换为list的操作)
print(dict(a_b))       # {1: 4, 2: 5, 3: 6}

2.zip(*zipped)函数

zip(*zipped)中的*zipped参数,可以是list数组,也可以是zip()函数返回的对象

例1:对二维列表的竖直方向求和或求均值

sheet=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]

for i in zip(*sheet):
    print(i)
    print(sum(i)/len(i))

# 输出:
# (1, 4, 7, 10) 此时len(i)=4
# 5.5
# (2, 5, 8, 11)
# 6.5
# (3, 6, 9, 12)
# 7.5

例2:对一维字符串列表的操作

list1=['abcd','adks','ksc']
for x in zip(*list1):
      print(x)
          
# 对每个单词依次取相应位置的字符组成一个元组tuple,当某个字符串结束时则停止
# 输出 ('a', 'a', 'k')   ('b', 'd', 's')   ('c', 'k', 'c')

3.编程题:最长公共前缀(力扣题)

题目描述:在一行中输入以空格间隔的若干以字母数字字符组成的字符串(字符串之间不包含其他字符)‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪ 定义一个函数,找出这些字符串的最长的共有前缀并输出‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪‪,如果不存在共有前缀,输出‘NOT FOUND’

示例:输入:water waiter watt   输出:wa

code:

def f(strs):
    prefix = ''
    for x in zip(*strs):             # 每个单词依次取相对应位置的字符组合
        if len(set(x)) == 1:         # 若去重后长度为1则为共有前缀字符(集合set元素唯一,可以去除                
                                     # 重复元素。三个元素相同时,去重后集合长度为1)
            prefix = prefix + x[0]   # 将共有字符拼接到字符串上
        else:                        # 若出现不同字符结束循环
            break
    if prefix:                       # 若字符串非空
        return prefix                # 返回共有前缀
    else:
        return 'NOT FOUND'
strs=list(input().split())  # 可以接收空格为间隔的所有元素构成列表
print(f(strs))

# 检验程序:
# 在python命令行输入:water waiter watt
# 则strs为:['water','waiter','watt']
# 最后一行输出:'wa'

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值