Python 你能把Try&;将除条款纳入清单理解或实施替代?
如何从遵循以下逻辑的不同子列表创建子列表:Python 你能把Try&;将除条款纳入清单理解或实施替代?,python,list,list-comprehension,sublist,Python,List,List Comprehension,Sublist,如何从遵循以下逻辑的不同子列表创建子列表: 如果子列表中的项目是子列表本身,则仅拉动第二个第三个项目并将其转换为字符串。我所说的“子列表中的项目是子列表本身”是指在子列表中的子列表中存在子列表的情况 如果子列表中的项不是子列表,只需将其转换为字符串即可 原始清单: [['24000.0', [item1,item2,'Bobby Fish']], ['24000.0', [item1,item2,'Abraham Lincoln']], ['9000.0', [item1,item2,'A
- 如果子列表中的项目是子列表本身,则仅拉动第二个第三个项目并将其转换为字符串。我所说的“子列表中的项目是子列表本身”是指在子列表中的子列表中存在子列表的情况
- 如果子列表中的项不是子列表,只需将其转换为字符串即可
[['24000.0', [item1,item2,'Bobby Fish']], ['24000.0', [item1,item2,'Abraham Lincoln']], ['9000.0', [item1,item2,'Abraham Lincoln']], ['12000.0', [item1,item2,'George Washington']], ['12000.0', [item1,item2,'George Washington']], ['6000.0', [item1,item2,'Abraham Lincoln']], ['15000.0', [item1,item2,'Abraham Lincoln']], ['15000.0', [item1,item2,'George Washington']], ['12000.0', [item1,item2,'Bobby Fish']], ['3000.0', [item1,item2,'Bobby Fish']], ['600.0', [item1,item2,'Bobby Fish']], ['1800.0', [item1,item2,'Bobby Fish']], ['6600.0', [item1,item2,'Abraham Lincoln']], ['11000.0', [item1,item2,'Bobby Fish']], ['8000.0', [item1,item2,'Abraham Lincoln']], ['4000.0', [item1,item2,'Abraham Lincoln']], ['12000.0', [item1,item2,'Abraham Lincoln']], ['2500.0', [item1,item2,'George Washington']], ['3000.0', [item1,item2,'Abraham Lincoln']], ['20000.0', [item1,item2,'George Washington']], ['12000.0', [item1,item2,'George Washington']], ['12000.0', [item1,item2,'George Washington']], ['3000.0', [item1,item2,'George Washington']]]
所需列表:
[['24000.0', 'Bobby Fish'], ['24000.0', 'Abraham Lincoln'], ['9000.0', 'Abraham Lincoln'], ['12000.0', 'George Washington'], ['12000.0', 'George Washington'], ['6000.0', 'Abraham Lincoln'], ['15000.0', 'Abraham Lincoln'], ['15000.0', 'George Washington'], ['12000.0', 'Bobby Fish'], ['3000.0', 'Bobby Fish'], ['600.0', 'Bobby Fish'], ['1800.0', 'Bobby Fish'], ['6600.0', 'Abraham Lincoln'], ['11000.0', 'Bobby Fish'], ['8000.0', 'Abraham Lincoln'], ['4000.0', 'Abraham Lincoln'], ['12000.0', 'Abraham Lincoln'], ['2500.0', 'George Washington'], ['3000.0', 'Abraham Lincoln'], ['20000.0', 'George Washington'], ['12000.0', 'George Washington'], ['12000.0', 'George Washington'], ['3000.0', 'George Washington']]
最初,我有这段代码,它实现了我想要的功能,但当这些项本身是子列表时,这不起作用,因为在这些情况下,我只需要第二项
lst = [[str(subli[i]) for i in range(2,len(subli))] for subli in qa[sf.records:]]
我找到了我想要的代码,但是它的速度是列表理解速度的两倍,所以我想知道是否有办法让它成为列表理解,或者无论如何让它更快。问题是在列表中实现try和except语句
Lst = []
for subli in qa[sf.records:]:
Sublist = []
for item in subli[2:]:
try:
Sublist.append(str(item[2]))
except IndexError:
Sublist.append(str(item))
Lst.append(Sublist)
print Lst
产生:
[['24000.0', 'Bobby Fish'], ['24000.0', 'Abraham Lincoln'], ['9000.0', 'Abraham Lincoln'], ['12000.0', 'George Washington'], ['12000.0', 'George Washington'], ['6000.0', 'Abraham Lincoln'], ['15000.0', 'Abraham Lincoln'], ['15000.0', 'George Washington'], ['12000.0', 'Bobby Fish'], ['3000.0', 'Bobby Fish'], ['600.0', 'Bobby Fish'], ['1800.0', 'Bobby Fish'], ['6600.0', 'Abraham Lincoln'], ['11000.0', 'Bobby Fish'], ['8000.0', 'Abraham Lincoln'], ['4000.0', 'Abraham Lincoln'], ['12000.0', 'Abraham Lincoln'], ['2500.0', 'George Washington'], ['3000.0', 'Abraham Lincoln'], ['20000.0', 'George Washington'], ['12000.0', 'George Washington'], ['12000.0', 'George Washington'], ['3000.0', 'George Washington']]
如果以上代码的速度有所提高,我将不胜感激。如果每个子列表的格式总是
[numberstring[item1,item2,string]
,那么这应该可以:
lst = [ [ str(subli[0]), subli[1][2] ] for subli in qa[sf.records:] ]
如果子列表任意长,并且其中包含任何一种项目,则应修改代码以仅测试子列表项目是否为列表(并查看所有项目),如:
当采用异常路径时,try/except将花费大量时间;测试更快。
子列表中的项本身就是子列表
,什么?我不理解样本数据上下文中的问题。似乎所有项都具有相同的结构([numberstring[item1,item2,string]]
),但您询问了一些有关异常和处理不同类型数据的问题。问题是什么还不清楚,所以我不能提出任何建议。你能不能把你的样本数据缩减到显示你需要处理的不同格式(没有太多冗余)?基本上,我想把这个:([numberstring,[item1,item2,string]])转换成:([numberstring,string])。我能做到这一点的唯一方法是使用“try”来尝试获取[item1,item2,string]的第三项,然后使用,除非您不能这样做,因为它只是numberstring。我只是觉得一定有更好的方法。每个子列表的格式总是[numberstring[item1,item2,string]]
?大多数时候都是这样。我希望代码能够足够灵活地接受像这样组织的代码[[item1,item2,string],numberstring]或者像这样组织的代码[[item1,item2,string],[item1,item2,string],numberstring],但是你回答我的问题
Lst = []
for subli in qa[sf.records:]:
Sublist = []
for item in subli:
if isinstance( item, list ):
Sublist.append( str(item[2]) )
else:
Sublist.append( str(item) )
Lst.append(Sublist)