python列表比较大小小问题,关于列表

python解决字典中的值是列表问题的方法
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了字典中的值是列表问题,先用value连成一个str,最后用str.split()作一个转换,生成一个列表.看了python cookbook,上面正好有一个recipe讲到如何处理这样的问题
问题:查找一些英文词在哪些小句中出现了,当然是用python来实现,当然是用字典,但是怎么让一个key对应一个 类型为列表的value,直接用列表的append()是不行的,比如dic[key].append(value),因为解释器并不知道 dic[key]的类型,当时赶时间,用了一个折衷的方案,就是先用value连成一个str,最后用str.split()作一个转换,生成一个列表.
&&& 看了python cookbook,上面正好有一个recipe讲到如何处理这样的问题,好了,揭晓答案吧!
(1)value中允许有重复项.
代码如下:dic = {}dic.setdefault(key,[]).append(value)#如:d1.setdefault('bob_hu',[]).append(1)d1.setdefault('bob_hu',[]).append(2)print d1['bob_hu'] # [1,2]
(2)value中无重复项.
代码如下:dic = {}dic.setdefault(key,{})[value] = 1#如:d1.setdefault('bob',{})['f'] = 1d1.setdefault('bob',{})['h'] = 1d1.setdefault('bob',{})['f'] = 1print d1['bob'] #{'h': 1, 'f': 1}
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具python 列表循环中的小问题 - 简书
python 列表循环中的小问题
项目中遇到的一些问题,做个笔记贴代码
#判断一个元素是否在列表中
def elementInLsit(cityname):
citysName = ['西宁', '惠州', '牡丹江', '本溪', '银川', '延安', '章丘', '石家庄',
'成都', '淄博', '福州', '济宁', '泰州', '中山', '汕头', '金华', '濮阳',
'桂林', '洛阳', '安阳', '唐山', '泰安', '温州', '宿迁', '漳州', '扬州', '丽水']
result = False
for city in citysName:
if str(cityname) == str(city):
result = True
return result
= [ '鞍山', '安阳','安庆', '安康', '安顺', '阿坝',
'阿克苏', '阿里', '阿拉尔', '阿拉善盟', '澳门',
'北京', '保定', '包头', '滨州', '宝鸡', '蚌埠', '本溪', '北海', '巴音郭楞', '巴中',
'定安', '琼中', '屯昌', '文昌市', '东海', '陵水', '琼海', '保亭', '万宁', '东方市', '宁国', '天长']
print(len(anCitynames))
tumpList2 = anCitynames
print(len(tumpList2))
for cityname in anCitynames:
if elementInLsit(cityname):
tumpList2.remove(cityname)
print(len(tumpList2))
python的列表list可以用for循环进行遍历,实际开发中发现一个问题,就是遍历的时候删除会出错第一个数组是 第二个数组 的子集(这是前提) ,也就是说第一个数组中的元素全部在第二个数组中,一开始怎么都对不上数,究其原因是因为这一句tumpList2 =
anCitynames赋值有问题.如果这样赋值,这俩变量公用一块内存,一个改变,另一个也会改变,导致出现各种问题,正确赋值方法为 tumpList2 = list(anCitynames)list方法会重新开辟一块内存,这样这两个变量就会互不干扰了.python 列表函数
list函数:
  功能:将字符创转化为列表,例:
&&&&&&&&&&&&&&
列表基本函数:
  &1.元素赋值,例:
&&&&&&&&&&&&&
&&&&&&&&&注意:通过list[0]= 'hel',如果原来位置上有值,会覆盖掉原来的。
&&&&&&2.分片操作
&&&&&&&&&1)显示序列,例:
&&&&&&&&&&&&&
&&&&&&&&&&&&&&注意:(1)list1[beg:end]将显示列表的从list1[beg]到list1[end-1]的元素,list1[end]不会显示
&&&&&&&&&&&&&&&&&&&&&&&(2)list1[beg:end]省略beg,默认beg= 0; 省略end默认end = len(list1)。因此list1[:]显示整个列表。
&&&&&&&&&&&2)修改序列,例:
&&&&&&&&&&&&&&&
&&&&&&&&&&&3)插入序列,例:
&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&注意:往list1的某个位置插入列表或字串时,列表的每项、字串的每个字符都会作为list1的一个元素,而不会整体插入。
&&&&&&&&&&&&&&&&思考:那作为整体插入咋办?
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&& 4)删除序列,例:
&&&&&&&&&&&&&&&&&
&&&&&&&&&3.count函数
&&&&&&&&&&&&功能:统计列表中某元素出现的次数。例:
&&&&&&&&&&&&&&&&& &
&&&&&&&&&&4.len函数
&&&&&&&&&&&&&&功能:统计列表中元素的个数。例:
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&5.append函数
&&&&&&&&&&&&&功能:往列表的最后一个位置插入(入栈)操作。例:
&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&& 扩展:可以”+“号 来实现列表的相加。例:
&&&&&&&&&&&&&&&&&
&&&&&&&& 6.extend函数
&&&&&&&&&&&&功能:修改原序列,链接两个序列产生新的序列。例:
&&&&&&&&&&&&&& &&&
&&&&&&&&&7.insert函数
&&&&&&& &&&&&功能:将元素插入到列表的指定位置。例:
&&&&&&&&&&&&&&&&&&
&&&&&&&& 8.pop函数
&&&&&&&&&&&&功能:删除指定位置元素。例:
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&注意:pop(n),n指明在列表中的位置,如果pop(),默认弹出最后一个元素(出栈操作)。
&&&&&&&&9.remove函数
&&&&&&&&&&&& &功能:删除第一个指定元素。例:
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&思考:怎样删除所有的指定元素?
&&&&&&&&&&&&&&&&&&
&&&&& 10.index函数
&&&&&&&&&&&&功能:从列表中找出与某个元素匹配的第一个匹配项的位置
&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&11.reverse函数
&&&&&&&&&&&&&&&功能:翻转列表。例:
&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& 12.sort函数
&&&&&&&&&&&&&&&功能:队员列表进行排序
&&&&&&&&&&&&&&&&&&& &
&&&&&&&&&&&&&&&&注意:sort函数修改了原序列,这里如果是采用b = a的方式,那么b和a指向同一个列表。例:
&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&思考:那么如何不改变原序列呢?
&&&&&&&&&&&&&&&&&&&&& 方法一:可以利用sorted()函数。例:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &
&&&&&&&&&&&&&&&&&&&& 方法二:创建副本。例:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&注意: 对于列表a:
&&&&&&&&&&&&&&&&&&&&&&&&&& b = a&& 那么b和a都指向同一个列表
&&&&&&&&&&&&&&&&&&&&&&&&&& b = a[:] 那么吧创建了一个列表副本
&&&&&&&&&&&关键字排序:key
&&&&&&&&&&&&&&&长度(len)排序:&&
&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&关键字排序:reverse()
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&注意:reverse = True&& 降序
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& reverse = False& 升序
&&&&&&&&& 13.cmp函数
&&&&&&&&&&&&&&功能:比较两个元素的大小。例:
&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&注意:(1)两个元素相同返回0,前大后小返回1,前小后大返回-1
&&&&&&&&&&&&&&&&&&&&&&&&(2)比较的对象是元素首个字符的ascii值,例:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &
&&&&&&&&& 14. set函数
&&&&&&&&&&&&&&功能:列出列表中不重复的元素(去重)集合。例:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&注意:利用set() 函数后就变成了集合,集合例元素无序,再利用list2[2]就出错了。
主要涉及知识点
列表是我们python里面最常见的数据类型,我们主要有以下的操作。
6、循环 (也称遍历)
例如定义列表:
主要涉及的基本方法以及介绍&table cellspacing=&0& cellpadding=&0& background-color:#width:716&=&& style=&word-wrap: break- font-family: 宋体, A padding: 0 margin: 0px auto 10 font-size: 12 color: rgb(80, 80, 80);&&
在列表末尾追加一个元素
List2.append('docker')
即可在末尾插入docker
在列表中某一位置插入某元素
List2.insert(2,”mysql”) 这里的2指的是列表元组的下标 &表示在第三位插入mysql
删除列表的某一元素
List2.remove(&linux&)
删除值为linux的元素
清空列表的值,
List2.clear()
类似于del List2 两者都能清空列表
该方法默认删除最后一个元素
List2.pop() #默认删除最后一个元素
List2.pop(1)#删除下标为1的元素
索引,查找某个元素的位置
List2.index(&linux&) #查找linux的位置,查找结果为下标,如果有多个相同的元素,只能确定第一个元素的位置
统计某个元素出现几次
List2.count(&linux&)统计linux元素出现的次数
翻转,将列表元素前后位置置换
List2.reverse()& #将列表元素翻转
print(List2)
排序按照(AScall码)先是特殊符号,然后数字字母首字母
List2.sort()&&& #将列表元素排序
print(List2)
list3=List2.copy()&& print(List2,list3)
可以合并两个列表,将某个列表的元素追加到一个列表
list1=['123',123,'abc']
List2.extend(list1)
['openstack', 'python', 'linux', 'docker', 'zabbix', 'nginx', &'linux', 'linux', '123', 'ww33##', '123', 123, 'abc']
简单的示例:
&一、列表的定义
&&&& List2=list(['openstack','python','linux',&docker&,&zabbix&,&nginx&,&linux&,&&linux&,&123&,&ww33##&])
&&& print(List2)
['openstack', 'python', 'linux', 'docker', 'zabbix', 'nginx', 'linux', 'linux',&'123', 'ww33##']
或者List2=['openstack','python','linux',&docker&,&zabbix&,&nginx&,&linux&,&
linux&,&123&,&ww33##&] 我们直接用后面的这种定义,检验和模拟相关方法和切片等。
二、切片与列表取值
& & 切片主要就是针对获取列表中部分或者单个元素的方法,通过下标访问列表中的元素,下标从0开始计数
取列表中的某一个值(通过下标取值,下标从0开始)
List2=['openstack','python','linux',&docker&,&zabbix&,&nginx&,&linux&,&linux&,&123&,&ww33##&]
print(List2[0])
print(List2[1])
print(List2[-2])
& & 我们发现在取值时下标为零的恰好取的值为是第一位元素,更好的证明了下标从零开始这一说法,
&同时发现print(List2[-2])恰好是倒数第二位元素,由此可见不仅顺着取值,可以倒着取值。
切片:访问里面的前多个值:
List2=['openstack','python','linux',&docker&,&zabbix&,&nginx&,&linux&,&linux&,&123&,&ww33##&]
print(List2[0:3]) #取前三个
['openstack', 'python', 'linux']
print(List2[:3])
['openstack', 'python', 'linux']
由此我们可以看出开始下标是0的时候,可以省略不写,还需要注意下标[0:3]能取到1,2,3位的元素,
即表示第四位取不到,在我们边界取值时需要注意。
print(List2[3:-1]) #取不到最后一位
print(List2[3:]) &#取得第四位到最后一位
print(List2[2:9:2])#取出下标为第二位到下标为9之间的 每隔一个元素取一次
print(List2[-3:-1]) #倒着取值取出倒数第三位和倒数第二位
print(List2[-3:])#取出倒数的后三位
print(List[0::2])#每隔一个元素取一次
print(list[::2]) #每隔一个元素取一次 和上面的一样
['docker', 'zabbix', 'nginx', 'linux', 'linux', '123']
['docker', 'zabbix', 'nginx', 'linux', 'linux', '123', 'ww33##']
['linux', 'zabbix', 'linux', '123']
['linux', '123']
['linux', '123', 'ww33##']
三、列表增加元素&
& &主要使用append的方法追加元素,在末尾增加
List2.append(&winner&)
print(List2)
['openstack', 'python', 'linux', 'docker', 'zabbix', 'nginx', 'linux', 'linux', '123', 'ww33##', 'winner']
&&在某一位置插入一元素,可以使用insert方法实现
List2.insert(2,&baidu&) #在第三位插入元素baidu
print(List2)
['openstack', 'python', 'baidu', 'linux', 'docker', 'zabbix', 'nginx','123', 'ww33##']
由此看出在某位置插入时,该位置元素整体向后移动。
四、修改某元素的值
& &&修改某元素的值,一般通过重新赋值的方法实现。
List2[2]=&我的钢铁&
List2[-1]=&人生苦短,我用python!&
#List2.insert(2,&baidu&)
print(List2)
['openstack', 'python', '我的钢铁', 'docker', 'zabbix', 'nginx', '123', '人生苦短,我用python!']
& & 删除分为删除一个和全部删除,在删除个别的时候,我们可以用remove()方法和pop()方法,用del和clear()方法可以删除整个列表。接下来根据实例分析一下几种方法有什么区别。
pop()方法中间的参数是下标,不带参数的时候默认删除最后一位。
print(List2)
['openstack', 'linux', 'docker', 'zabbix', 'nginx', '123', 'ww33##']
List2.pop(-4)
print(List2)
['openstack', 'python', 'linux', 'docker', 'nginx', '123', 'ww33##']
remove()方法中间的参数直接是元素的内容
List2.remove('linux')
print(List2)
['openstack', 'python', 'docker', 'zabbix', 'nginx', '123', 'ww33##']
当列表存在相同元素linux时:
List2=['openstack','linux','python','linux',&docker&,&zabbix&,&nginx&,&123&,'linux',&ww33##&]
List2.remove('linux')
print(List2)
['openstack', 'python', 'linux', 'docker', 'zabbix', 'nginx', '123', 'linux', 'ww33##']
当存在多个值时只会删除一个值
clear()方法使用 ,是对整个列表的处理
List2.clear()
print(List2)
del &可以删除整个列表或单个元素&
del &List2
print(List2)
del &List[2]
Traceback (most recent call last):
& File &C:/Users/Administrator/PycharmProjects/s14/jiounumber.py&, line 21, in&
& & print(List2)
NameError: name 'List2' is not defined
删除个别元素 结合切片
List2=['openstack','云计算','python',&中国&,&中东&,'linux',123,&ww33##&]
del List2[2]
print(List2)
['openstack', '云计算', '中国', '中东', 'linux', 123, 'ww33##']
&观察结果,可以发现del是删除了定义的列表而,clear()是清空了列表的元素。
六、查询某个元素位置以及出现的次数(列表元素可以重复)
& & 对列表的查询主要有统计列表是多大的长度和查询某内容的元素在什么位置,主要使用index()索引方法和count()元素出现次数方法实现。
List2=['openstack','python','linux',&docker&,&zabbix&,&nginx&,&123&,&ww33##&]
print(List2.index(&linux&))
print(List2.count(&linux&))
List2=['openstack','linux','python','linux',&docker&,&zabbix&,'linux',&nginx&,&123&,&ww33##&]
print(List2.index(&linux&))
print(List2.count(&linux&))
& 由此可以看到,当一个元素含有多个形同的元素时,索引一般是找到第一个该元素。
七、列表的翻转以及排序
& &&可以通过reverse()方法和sort()方法实现对列表的翻转和排序,所谓翻转,就是将列表元素的位置重翻转,而排序主要是根据Ascall码来排序,
List2=['openstack','linux','python','linux',&docker&,&zabbix&,'linux',&nginx&,&123&,&ww33##&]
List2.reverse()
print(List2)
['ww33##', '123', 'nginx', 'linux', 'zabbix', 'docker', 'linux', 'python', 'linux', 'openstack']
List2.sort()
print(List2)
['123', 'docker', 'linux', 'linux', 'linux', 'nginx', 'openstack', 'python', 'ww33##', 'zabbix']
再稍微复杂一点,里面添加中文和整数等内容
List2=['openstack','云计算','python',123,&docker&,&zabbix&,'linux',30.84,&123&,&ww33##&]
List2.sort()
print(List2)
执行结果:
Traceback (most recent call last):
& File &C:/Users/Administrator/PycharmProjects/s14/jiounumber.py&, line 24, in&
& & List2.sort()
TypeError: unorderable types: int() & str()
整型和字符串无法比较,接下来,再试试
List2=['openstack','云计算','python',&中国&,&中东&,'linux',&123&,&ww33##&]
List2.sort()
print(List2)
['123', 'linux', 'openstack', 'python', 'ww33##', '中东', '中国', '云计算']
& 由此发现列表的排序还是很NB的,关于上面的整型和字符串无法比较的,我们可以将整形转换成字符串比较。
八、循环、包含以及copy()、extend()方法
& & 循环,一般是通过for循环的方式将列表中的元素打印出来的方法
List2=['openstack','云计算','python',&中国&,&中东&,'linux',&123&,&ww33##&]
for &i &in List2 :
& & print (i)
print(List2)
['openstack', '云计算', 'python', '中国', '中东', 'linux', '123', 'ww33##']
通过循环我们就可以找出列表的每个元素。同时我们也可以看出这时的打印和之前的有所不同
包含 :我们可以判断某个内容是否在该列表里面,结果的返回值是布尔值Ture或者False,存在为真不存在为假。
List2=['openstack','云计算','python',&中国&,&中东&,'linux',123,&ww33##&]
print( 'linuxww' &in List2)
print('中东' in List2)
print(123 &in List2)
print( 12 in List2)
entend 方法 使用该方法,可以将两个列表合并到一个里面,同时对其中的一个值不会发生任何的影响。
List2=['openstack','云计算','python',&中国&,&中东&,'linux',123,&ww33##&]
List1=[123,'abc','中国']
#print( 'linuxww' &in List2)
#print('中东' in List2)
print(List2,List1)
print(List1)
List1.clear()
print(List1)
['openstack', '云计算', 'python', '中国', '中东', 'linux', 123, 'ww33##'] [123, 'abc', '中国']
[123, 'abc', '中国']
由此发现extend方法并不会影响被合并列表(List1)的值,只有自己做其他操作时才会发生变化。
copy()方法&可以实现列表的复制
List2=['openstack','云计算','python',&中国&,&中东&,'linux',123,&ww33##&]
list3=List2.copy()
print(List2,list3)
['openstack', '云计算', 'python', '中国', '中东', 'linux', 123, 'ww33##']
&['openstack', '云计算', 'python', '中国', '中东', 'linux', 123, 'ww33##']
注意事项:
&List2=['openstack','云计算','python',[&中国&,&中东&],'linux',123,&ww33##&]
list3=List2.copy()
print(List2)
print(list3)
List2[2]=&MYSQl DBA&
List2[3][1]=&北京&
print(List2)
print(list3)
执行结果:
['openstack', '云计算', 'python', ['中国', '中东'], 'linux', 123, 'ww33##']
['openstack', '云计算', 'python', ['中国', '中东'], 'linux', 123, 'ww33##']
['openstack', '云计算', 'MYSQl DBA', ['中国', '北京'], 'linux', 123, 'ww33##']
['openstack', '云计算', 'python', ['中国', '北京'], 'linux', 123, 'ww33##']
我们将列表List2中的List2[2]的python和List2[3][1]的中东更改为List2[2]=&MYSQl DBA&和List2[3][1]=&北京
输出后发现复制的那一部分List2[3][1]复制后是一样的,而List2[2]的值会不一样。主要是内存的地址原因。
同时对这种情况想要复制相同的是不行的
List2=['openstack','云计算','python',[&中国&,&中东&],'linux',123,&ww33##&]
list3=List2
print(List2)
print(list3)
List2[2]=&MYSQl DBA&
List2[3][1]=&北京&
print(List2)
print(list3)
这里给list3赋值为List2这时会发现更改List2时,会直接更改list3的值
['openstack', '云计算', 'python', ['中国', '中东'], 'linux', 123, 'ww33##']
['openstack', '云计算', 'python', ['中国', '中东'], 'linux', 123, 'ww33##']
['openstack', '云计算', 'MYSQl DBA', ['中国', '北京'], 'linux', 123, 'ww33##']
['openstack', '云计算', 'MYSQl DBA', ['中国', '北京'], 'linux', 123, 'ww33##']
要想复制完全一样的,我们可以导入copy模块
import copy
List2=['openstack','云计算','python',[&中国&,&中东&],'linux',123,&ww33##&]
list3=copy.deepcopy(List2)
print(List2)
print(list3)
List2[2]=&MYSQl DBA&
List2[3][1]=&北京&
print(List2)
print(list3)
执行的结果:
['openstack', '云计算', 'python', ['中国', '中东'], 'linux', 123, 'ww33##']
['openstack', '云计算', 'python', ['中国', '中东'], 'linux', 123, 'ww33##']
['openstack', '云计算', 'MYSQl DBA', ['中国', '北京'], 'linux', 123, 'ww33##']
['openstack', '云计算', 'python', ['中国', '中东'], 'linux', 123, 'ww33##']
这时发现,List2元素的值改变不会影响list3的值,下面的这种copy,我们称为deep.copy,而列表的copy()方法是一种浅copy
九、列表的其他操作
& & 除了以上主要操作,我们还可以对列表做以下的操作。列表对 + 和 &* 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表
List2=['openstack','云计算','python',&中国&,&中东&,'linux',123]
list3=[&open&,&ip&,&config&]
print(List2+list3)
print(list3*3 )
['openstack', '云计算', 'python', '中国', '中东', 'linux', 123, 'open', 'ip', 'config']
['open', 'ip', 'config', 'open', 'ip', 'config', 'open', 'ip', 'config']
+号实现的功能和之前的append()方式一样,而*表示重复,后面的的数字表示重复的次数。
&python列表函数
&在上面我们分析了python的列表方法,python列表还有一部分列表函数,常见的有max(list),min(list)以及len(list)和list(seq):
len(list ) 就是上面提到的列表的长度,
max(list) 列表的最大值
min(list)列表的最小值
list(seq)将元组转换为列表,我们知道元组的基本属性和列表一样,区别就在于列表使用[]方括号定义,而元组是()小括号定义,以及元组的元素不能重新赋值。
List2=['openstack','云计算','python',&中国&,&中东&,'linux',123]
list3=[&open&,&ip&,&config&,'999','2929',]
tet=(&www&,&www&,1234)
print(type(tet))
print(list(tet))
print(type(list(tet)))
print(List2+list3)
print(list3*3 )
print(len(list3))
print(max(list3))
print(min(list3))
&#元组tet的类型
['www', 'www', 1234] #print(list(tet))元组转换列表输出
#print(type(list(tet)))元组转化列表后的类型验证
['openstack', '云计算', 'python', '中国', '中东', 'linux', 123, 'open', 'ip', 'config', '999', '2929']
['open', 'ip', 'config', '999', '2929', 'open', 'ip', 'config', '999', '2929', 'open', 'ip', 'config', '999', '2929']
5 #print(len(list3))列表list3的长度统计
open &#print(max(list3)) 列表的最大值
2929 &#print(min(list3)) 列表最小值
十、列表的嵌套
& & &在上面讲到列表的copy()方法时,我们就用到了列表,因为列表的元素可以是任何类型,所以列表的元素还可以是列表,这时候的列表就会形成嵌套关系。
List2=['openstack','云计算','python',&中国&,&中东&,[[&open&,&ip&],&config&,'999','2929',]]
print(List2)
结果: 实现三层嵌套
['openstack', '云计算', 'python', '中国', '中东', [['open', 'ip'], 'config', '999', '2929']]
十一、列表嵌套处理
& & &列表有很好的灵活性,我们可以使用列表的嵌套,但是在使用列表嵌套的时候,我们要想简单的实现嵌套列表的遍历就会发现一定的问题,代码和实践如下:
#!/usr/bin/env python
#_*_coding:utf-8_*_
list3=[&openatck&,&docker&,&linux&,&and&,&list&,&dict&,&set&,[[&openatck646646&,&docker47575&],
for each_item in list3:
& & if isinstance(each_item, list):
& & & & for seach_item in each_item:
& & & & & & print(seach_item)
& & & & print(each_item)
['openatck646646', 'docker47575']
上面定义的列表是一个三层的嵌套,我们用循环遍历的时候发现还是显示列表,所以我们在这里就对列表
处理,就是进行下面的处理,多次判断是否包含列表。需要注意的是isintance(object,type),这里的
对象名不能是list,否则type输入list会报错的,这就是占用关键字报错的原因。
更改完善后:
#!/usr/bin/env python
#_*_coding:utf-8_*_
list3=[&openatck&,&docker&,&linux&,&and&,&list&,&dict&,&set&,[[&openatck646646&,&docker47575&],&weinenr&,&qee&]]
for &each_item &in list3:
& & if isinstance(each_item,list):
& & & & for seach_item in each_item:
& & & & & & if isinstance(seach_item,list):
& & & & & & & & for &each_item2 in seach_item:
& & & & & & & & & & print(each_item2)
& & & & & & else:
& & & & & & & & print(seach_item)
& & & & print(each_item)
openatck646646
docker47575
&由于是3层的嵌套所以需要进行2层的输出格式的判断,如果存在列表则继续循环遍历,不是列表则直接输出
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?小白python进击第二周3.列表生成式问题 - wangke713的博客 - CSDN博客
小白python进击第二周3.列表生成式问题
今天学习中遇到一个问题:如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错,改进的后的如下图:
但是输出中没有包括整数。
所以我就改进了程序如下图:
可以轻易看出后面两个版本是错的,为什么?
经过多方查询:
列表生成器
comprehension ::=
expression comp_for
&for& target_list &in& or_test [comp_iter]
comp_for | comp_if
&if& expression_nocond [comp_iter]
条件表达式
conditional_expression ::=
or_test [&if& or_test &else& expression]
expression
conditional_expression | lambda_expr
expression_nocond
or_test | lambda_expr_nocond
可以看出条件表达式没有for
条件表达式 / lambda表达式&+&for&是列表生成器的一种形式。(Lambda
表达式 Lambda 表达式”是一个,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型。)
其中s.lower()&if&isinstance(s,str)&else&s是条件表达式,这是列表生成器。
L= [s.lower() for s in L if isinstance(s,str) else s for s in L]
其中s.lower() for s in L if isinstance(s,str)
else s不是条件表达式,
if isinstance(s,str) else s for s in L也不是条件表达式,
而符合列表生成器的comp_if
::= &if& expression_nocond [comp_iter]。所以这也是列表生成器。
我的热门文章

我要回帖

更多关于 python 列表的最小值 的文章

 

随机推荐