Python内置函数:zip() “护短”

156 篇文章 3 订阅

Python 官网https://www.python.org/
  这里,才 python 前沿。可惜是英文原版。所以,我要练习英文阅读。🧐🧐






  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚



练习:Python内置函数, zip() “护短”



        目录


1、题目
2、运行效果
3、问题解析
4、help(zip)
5、本笔记完整代码

回首页

问题
在这里插入图片描述

  看到QQ学习群的一个关于 zip() 函数问题,觉得有必要记个笔记,警醒自己。当初我学到这里的时候,也一样没少犯迷糊。
补两个空格就行了”,群里已有大佬解惑。对,解决的办法就是将符号列表 l3 扩容为六个元素,扩容元素用空字符串 ‘’ 就好。


回首页

问题解析

  Python内置函数:zip() “护短”。工作默认只处理到完整配对(参数中最短序列)。由于列表 l3 只有四个元素,所以只 print( ) 四组。要想实现提问者的目的——扩容 l3 即可。后面追加的两个空字符串 ‘’ 完美配对列表 l1、l2 原本多出的两个元素,实现6组输出(6个列表元素)。

l3 = ['+', '-', '*', '/', '', '']

  下面开始练习。为了代码易读和输出好看一点,我对“提问者”的代码作了修改:

  • a、修改变量名字符串,能“望文知义”。
  • b、添加空行打印和启用了字符串格式化打印。
  • c、加入了 ASCII 码打印输出颜色控制字符串,让输出“有色”——通过我自码的工具coloe() 实现。
偷懒——“解析”练习数据
nums = list(range(1, 7))
alphs = list('abcdef')
signs = list('+-*/')

给符号序列扩容,以适配数字和字母序列。
1、“+”连接运算符——简单粗暴、干净利落

signs = signs + ['']*2

2、最原始的操作——直抒胸臆

signs = signs + [''] + ['']

3、list.extend方法揉和原始

signs.extend([''] + [''])

4、list.extend方法收纳玲珑

signs.extend(['']*2)

5、for循环追加’'空字符串

for i in range(2):
    signs.append('')

6、循环本尊追加

for i in ('', ''):
    signs.append(i)

7、list.insert方法位置本尊扩列

for i in ('', ''):
    signs.insert(len(signs), i)

8、lisy.insert方法位置扩列

for i in range(2):
    signs.insert(len(signs), '')

9、list.insert() == list.append() ?
True !
  任意取一个列表元素永远到不了的位置索引,就一直在最后插入,同 append 方法,这也是 insert 方法的特性。

for i in range(2):
    signs.insert(9, '') # 任意取一个列表元素永远到不了的位置索引,就一直在最后插入,同 append 方法,这也是 insert 方法的特性。

10、略有瑕疵的扩容方式
  这个代码实现方式慎用!如果列表中前面有与最后一个元素重复的元素,将会插入前面元素之后。——此法只适合最后一个元素前面没有重复的列表。(本例中符号列表’+、-、*、/'没有重复元素。)

for i in range(2): # 这个代码实现方式慎用!如果列表中前面有与最后一个元素重复的元素,将会插入前面元素之后。——此法只适合最后一个元素前面没有重复的列表。(本例中符号列表'+-*/'没有重复元素。)
    signs.insert(signs.index(signs[-1])+1, '')
  前面十种方式,都可以给本例中的符号列表扩容。我更喜欢第一种!简单粗暴、干净利落。

回首页

代码运行效果
在这里插入图片描述


回首页

help(zip) # zip() 函数帮助文档查看

help(zip)

在这里插入图片描述
帮助文档原文片段A
The zip object yields n-length tuples, where n is the number of iterables passed as positional arguments to zip(). The i-th element in every tuple comes from the i-th iterable argument to zip(). This continues until the shortest argument is exhausted.

帮助文档原文片段A译文:

  zip 对象生成 n 个长度的元组,其中 n 是作为位置参数传递给 zip() 的迭代数。每个元组中的第 i 个元素来自于 zip()的可迭代参数第 i 个元素对象。这种情况一直持续到最短的可迭代参数的元素对象耗尽为止。


  • zip.__doc__之机器翻译

zip(*iterables, strict=False) --> Yield tuples until an input is exhausted.(生成元组,直到输入耗尽为止。)

>>> list(zip(‘abcdefg’, range(3), range(4)))
[(‘a’, 0, 0), (‘b’, 1, 1), (‘c’, 2, 2)]

The zip object yields n-length tuples, where n is the number of iterables
passed as positional arguments to zip(). (zip对象生成n个长度的元组,其中n是迭代对象的数量,作为位置参数传递给zip。)The i-th element in every tuple comes from the i-th iterable argument to zip(). (每个元组中的第i个元素来自于对zip的第i个可迭代参数。) This continues until the shortest argument is exhausted.(这种情况一直持续到最短的可迭代参数最后一个元素为止。)

If strict is true and one of the arguments is exhausted before the others, raise a ValueError.(如果strict=True,并且其中一个参数在其他参数之前已经用尽,则提出一个赋值错误。)


语法

zip(*iterables, strict=False) # --> Yield tuples until an input is exhausted.

实例

>>> list(zip('abcdefg', range(3), range(4)))
[('a', 0, 0), ('b', 1, 1), ('c', 2, 2)]
>>> 

帮助文档原文片段B
If strict is true and one of the arguments is exhausted before the others, raise a ValueError.

帮助文档原文片段B译文:

  如果严格参数是正确的,并且其中一个参数在其他参数之前已经用尽,则提出一个赋值错误。

在这里插入图片描述
8 个字母适配 6 个数字,报错提示信息:

ValueError: zip() argument 2 is shorter than argument 1

报错提示信息译文:

  zip() 参数 2 比参数 1 短。

  strict 参数默认是 Flase,忽略 zip() 短长不齐,只处理完整配对(This continues until the shortest argument is exhausted.)。

strict=Flase

回首页

完整 Python 代码(完整代码为最后完成调试后的最终代码,前面贴出的代码是调试出功能就上传的,可能后来已作优化。完整代码中的对应部分,可能比前面贴出的“高级”哦。这是个人记笔记定CSDN博文的习惯所致,敬请谅解。)

  我的解题思路,已融入代码注释,博文中就不再赘述。

(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)

#!/sur/bin/env python
# coding: utf-8

'''
filename: /sdcard/qpython/tem.py
梦幻精灵_cq的炼码场

'''


from mypythontools import clear, localtime_show, color, wait, cut_line # 从自码工具模块加载需用代码模块中要使用的函数。

nums = list(range(1, 7))
alphs = list('abcdef')
signs = list('+-*/')

print(f'\n\n练习数据列表:')
for i in ('nums', 'alphs', 'signs'): # 打印练习数据列表。
    print(f"{i} = {eval(i)}") # eval()函数把字符串转python可执行代码语句。

print(f'\n输出结果:', end='')
print(color(1, 'f_green')) # 屏幕绿色打印起。
for num,alph,sign in zip(nums, alphs, signs):
    print(f'{num} {sign} {alph}')
print(color(0)) # 屏幕颜色打印止。

print(f'\n\n【解决问题】符号列表扩容成数字和字母列表一样的六个元素:\nsings = sings + [""]*2')
signs = signs + ['']*2
print(f'\n符号列表扩容后:', end='')
print(f"\n{color(1,'f_green')}signs = {signs}{color(0)}")

print(f'\n输出结果:', end='')
print(color(1, 'f_green')) # 屏幕绿色打印起。
for num,alph,sign in zip(nums, alphs, signs):
    print(f'{num} {sign} {alph}')
print(color(0)) # 屏幕颜色打印止。

wait() 

回首页

参考文章
    • 15
      点赞
    • 8
      收藏
      觉得还不错? 一键收藏
    • 打赏
      打赏
    • 8
      评论
    评论 8
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    梦幻精灵_cq

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值