Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 你能把Try&;将除条款纳入清单理解或实施替代?_Python_List_List Comprehension_Sublist - Fatal编程技术网

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)