我正在学习列表理解并且它非常快,但我试图将该值插入子列表,并且它显示该子列表的None
。我正在尝试这里,
def tester(lst):
print [ x if x%2 else x*100 for x in range(1, 10) ] # It is working
#output: [1, 200, 3, 400, 5, 600, 7, 800, 9]
print [ls.insert(2,"Null") for ls in lst]
#output: [None, None]
lst = [['a','c','d'],['1','2','3']]
tester(lst)
为何显示[None, None]
?以及为什么它没有显示[['a','c','d', 'Null'],['1','2','3', 'Null']]
答案 0 :(得分:2)
list.insert
就地修改列表并返回None
。
>>> lis = range(5)
>>> repr(lis.insert(2, 'null')) # returns None
'None'
>>> lis # But the list is affected.
[0, 1, 'null', 2, 3, 4]
在这里使用简单的for循环:
for ls in lst:
ls.insert(2, "Null")
你也可以使用列表理解,但我更喜欢正常的循环版本:
>>> lst = [range(5) for _ in range(5)]
>>> [ls for ls in lst if not ls.insert(2, 'null')]
[[0, 1, 'null', 2, 3, 4], [0, 1, 'null', 2, 3, 4], [0, 1, 'null', 2, 3, 4], [0, 1, 'null', 2, 3, 4], [0, 1, 'null', 2, 3, 4]]
此处检查if条件时,项目将插入当前列表,而当list.insert
返回None
时,not None
始终为True
。
<强>更新强>
根据您需要使用三元表达式的条件更新列表对象:
>>> lst = [['a','c','d'],['1','2','3'], [1, 2, 3, 4]]
>>> [ls if (len(ls) == 3 and not ls.insert(2, 'null')) else ls for ls in lst]
[['a', 'c', 'null', 'd'], ['1', '2', 'null', '3'], [1, 2, 3, 4]]