Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 如何在每个子列表的索引[0]处拆分字符串,并将每个拆分索引都包含在其中';她自己的原始名单?_Python_String_List_Split_Sublist - Fatal编程技术网

Python 如何在每个子列表的索引[0]处拆分字符串,并将每个拆分索引都包含在其中';她自己的原始名单?

Python 如何在每个子列表的索引[0]处拆分字符串,并将每个拆分索引都包含在其中';她自己的原始名单?,python,string,list,split,sublist,Python,String,List,Split,Sublist,如何将所有子列表的索引0处的字符串拆分为单独的元素,并将每个拆分的元素包含在原始子列表的副本中 例如: Original_List = [['a,b','c','d','e','f'],['1','2','3'],['z,y','1','2']] 预期结果: Desired_List = [['a','c','d','e','f'],['b','c','d','e','f'],['1','2','3'],['z','1','2'],['y','1','2']] 另外,通过一个实际示例进一步说

如何将所有子列表的索引0处的字符串拆分为单独的元素,并将每个拆分的元素包含在原始子列表的副本中

例如:

Original_List = [['a,b','c','d','e','f'],['1','2','3'],['z,y','1','2']]
预期结果:

Desired_List = [['a','c','d','e','f'],['b','c','d','e','f'],['1','2','3'],['z','1','2'],['y','1','2']]
另外,通过一个实际示例进一步说明:

Original_List = [['Contract_ID1,Contract_ID2','Amount','Date'],['Contract_ID3,Contract_ID4','400','Jan1']]
我希望每个子列表只有一个合同ID,但仍然有与其关联的金额和日期

Desired_List =  [['Contract_ID1','Amount','Date'],['Contract_ID2','Amount','Date'],['Contract_ID3','400','Jan1'],['Contract_ID4','400','Jan1']]
我可以使用下面的命令拆分所有子列表的索引0处的所有字符串,但我不知道如何为每个拆分元素复制整个列表,然后用拆分元素替换拆分的字符串,以便每个拆分元素都有自己的列表

Split_First_Indices_of_Sublists = map(lambda x: x[0].split(","),Original_List)
>>[['a', 'b'], ['1'], ['z', 'y']]
for x in Original_List:
     x.pop(0)
>> [['c', 'd', 'e', 'f'], ['2', '3'], ['1', 2]]

我认为这是最清晰的显式循环:

Desired_List = []

for li in Original_List:
    for spl in li[0].split(','):
        Desired_List.append([spl] + li[1:])
给出:

Desired_List
Out[153]: 
[['a', 'c', 'd', 'e', 'f'],
 ['b', 'c', 'd', 'e', 'f'],
 ['1', '2', '3'],
 ['z', '1', '2'],
 ['y', '1', '2']]
当然,您可以立即将其转换为等效的单行列表comp:

[[spl] + li[1:] for li in Original_List for spl in li[0].split(',')]
其可读性可能会降低,也可能不会降低,具体取决于读卡器:-)


最后,请确保这是您真正想要的数据结构。对于你的最终产品来说,
合同ID键入的
命令似乎是一种非常自然的结构。

你有混合类型还是2是一个打字错误?它背后有什么问题需要解决?所需的
列表是否也应该包含
['b','c','d','e','f']
不是
['b','c','d','e','f']
您想要的输出中缺少了?抱歉,各位,您认为应该包括['b'、'c'、'd'、'e'、'f']是正确的。我添加了一个更具体的例子来增加清晰度。我最关心的是速度/效率,因为我在一个大的列表上执行此操作。这当然可以,但我想知道如何提高速度。如果您对此有任何想法,请告诉我。@Chris列表comp版本可能是最有效的。在列表连接部分(
[spl]+li[1://code>)中可能会有一些优化,但是字符串拆分操作无法真正加快,可能会占用大量的运行时间。如果你真的需要优化,我建议你用一个剖析器深入研究,看看大部分时间都花在了哪里。这并不是说这个问题不能加快,只是你目前的操作。如果您要移动到一个真正的数据库系统或矢量化系统(如
numpy
),那么当然,这可以很快完成。感谢您让我了解numpy和profiler!我将研究这两个功能,不仅是为了这个,还为了我需要运行的许多其他功能。我还不确定在numpy中我将如何实现这一点(如果您对此有任何想法,请告诉我),但我会研究它。再次感谢。
Original_List=[['a,b','c','d','e','f'],['1','2','3'],['z,y','1','2']]
desired_list=[]
for p in pl:
    try:
        splited=p.split(',')
        if not type(splited) is list:
            splited=[splited]
        if count(splited)>1:
            for list in splited:
                p[0]=list
                desired_list.append(p)
        else:
            desired_list.append()
    except:
        pass