首页 > 解决方案 > 列表操作 Python

问题描述

我有 2 个列表:

name_info = ['0.abc','450.xyz','7.garfunkl','Coma','Cancer']  
XY_coorinfo = ['1234:5678', '2345:6543','3245:1234', '4587:2346', '6785:23987']

我想要的输出:

0,abc,1234,5678
450,xyz,2345,6543
7,garfunkl,3245,1234
,Coma,4587,2346
,Cancer,6785,23987

我想我需要列表操作,但不确定如何在两个列表上进行 1:1 匹配?我在里面尝试了一个IF子句name_id并且它有效,但我想要一个 else 子句来说明它是否找不到"."让它为空?

def name_table(cur_ic,table_names, column_name,print_out=False ):
    #print (table_names)
    id = []
    name_info = []
    name_info = cur_ic.execute("SELECT nameandid FROM one_table ; " ).fetchall()
    XY_Coordinfo = []
    XY_Coordinfo = cur_ic.execute('''SELECT coor_rot FROM another_table WHERE id < '431'; ''').fetchall()
    return name_info, XY_Coordinfo



def write_outfile(cur_ic, name_info, XY_coordinfo,print_out=True):
    #print name_info, XY_Coordinfo  

    name_id = [x.split('.', 1)[0] for x in partitioninfo if '.' in x ]


if __name__ =='__main__':
    sqlite_db = "sample.sqLiteDB"
    conn_ic,cur_ic = connect(sqlite_db)
    all_db_fetch(cur_ic, print_out=False) 
    table_names,column_name = all_db_fetch(cur_ic)
    name_table(cur_ic,table_names,column_name, print_out=False)     
    name_info,XY_Coordinfo = info_table(cur_ic,table_names,column_name)
    write_outfile(cur_ic, name_info, XY_coordinfo,print_out=True) 

标签: pythonsql

解决方案


用于zip()同时迭代两个列表并迭代splitjoin所需的格式:

name_info = ['0.abc','450.xyz','7.garfunkl','Coma','Cancer'] 
XY_coorinfo = ['1234:5678', '2345:6543','3245:1234', '4587:2346', '6785:23987']

for x, y in zip(name_info, XY_coorinfo):
    print(','.join(x.split('.') + y.split(':')))

# 0,abc,1234,5678
# 450,xyz,2345,6543                                           
# 7,garfunkl,3245,1234                                        
# Coma,4587,2346                                              
# Cancer,6785,23987

对于确切的输出:

name_info = ['0.abc','450.xyz','7.garfunkl','Coma','Cancer'] 
XY_coorinfo = ['1234:5678', '2345:6543','3245:1234', '4587:2346', '6785:23987']

for x, y in zip(name_info, XY_coorinfo):
    l, _ , r = x.partition('.')
    if not r:
        l = f',{l}'
        print(','.join([l] + y.split(':')))
    else:
        print(','.join([l, r] + y.split(':')))

# 0,abc,1234,5678
# 450,xyz,2345,6543
# 7,garfunkl,3245,1234
# ,Coma,4587,2346
# ,Cancer,6785,23987

推荐阅读