2019-05-13 把列表转换成字符串的四种方式

大哥大姐,请教一下,2019-05-13 把列表转换成字符串的四种方式
最新回答
蓝莓格格巫

2024-12-03 00:02:54

上次说python是干啥的,简单理解就是通过各种方式搜集数据,进行数据处理,最后输出的一门工具语言。
其中经常用到的,比如把列表转成字符串,再把字符串处理后重新生成列表。下面以使用ip地址,生成isis的network为例来说明。
我们知道isis 的网络号通常是这样:“49.0001.0912.0908.6001.00”, 其中“0912.0908.6001” 这一段,通常是把loopback地址先补足3位,再分成3端算出来,比如192.168.10.1, 先变成192.168.010.001,去掉“.”,再按4位分割则是: 1921.6801.0001,网络号就是“49.0001.1921.6801.0001.00”
好了,那么先输入的IP地址"192.168.10.1"是一个字符串,首先按"."分割:

然后补0到3位。由于数据比较固定,就用for循环搞定:

现在要ip_list是一个列表["192", "168", "110", "001"],说到正题,有三种方式可以把列表加起来:
1、最常见的是用for循环

这种方式的弊端是效率较低,因为在循环连接字符串的时候,每次都要重新开辟空间,然后把字符串连接起来,再放入新的空间,重复循环,内存操作比较频繁,效率低。数据量大的时候,会表现的很明显。
2、建议使用 join,最为简洁

3、使用字符替换,

但是你需要知道列表里有多少个值,否则会报错:

现在得到了新的字符串,生成net只需按顺序取出相加即可:

4、当然也可以直接把列表里的值相加,需要对列表结构了解很清晰:

完整的脚本如下:

输出结果如下:

BTW,还有一个更简单的方法,前提是IP地址基本固定,比如说我们知道IP地址都在同一个C类地址,只有最后一位不同,如192.168.10.X/24, 生成的network地址都是类似"49.0001.0912.0908.6001.00" - "49.0001.0912.0908.6254.00"这样只有倒数几位不同的,可以用一句搞定:

意思是把ip地址以"."分割成列表后,把最后一个转换成数字,"{:0>3d}"表示长度3位,左边补0, 如果是"{:0<3d}"则是右边补0。