Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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将单个列表拆分为两个列表_Python - Fatal编程技术网

使用Python将单个列表拆分为两个列表

使用Python将单个列表拆分为两个列表,python,Python,我有一张单子 ['2', '16SCSE102014', '15/03/2019', '16SCSE101350', '15/03/2019', '1', '16SCSE102020', '02/02/2020'] 我想把它分成两个列表 ['16SCSE102014','16SCSE101350','16SCSE102020'] ['15/03/2019','15/03/2019','02/02/2020'] “2”和“1”中的数字是表示“16SCSE102020”对数和随后的“日期”

我有一张单子

['2', '16SCSE102014', '15/03/2019', '16SCSE101350', '15/03/2019', '1', '16SCSE102020', '02/02/2020'] 
我想把它分成两个列表

['16SCSE102014','16SCSE101350','16SCSE102020'] 

['15/03/2019','15/03/2019','02/02/2020']

“2”和“1”中的数字是表示“16SCSE102020”对数和随后的“日期”的标记

好的,一个非常直接的解决方案是迭代列表,忽略标记“1”、“2”等,因为它们似乎没有实际用途,如果您的输入确实如示例中所示按顺序排列,则按顺序插入结果列表,否则一个简单的正则表达式就可以了,如果您需要,请通知我 因此,代码应该是:

strings, dates = [], []
i = 0
while i <len(input_list):
    if not input_list[i].isdigit(): 
        strings.append(input_list[i])
        i += 1
        dates.append(input_list[i])
    i += 1

因此,代码假定您的字符串不能被解释为标记保留的数字,并且输入的顺序与您显示的顺序相同,如果您可能使用外部库,则其功能非常适合您的任务:

import more_itertools
lst = ['2', '16SCSE102014', '15/03/2019', '16SCSE101350', '15/03/2019', '1', '16SCSE102020', '02/02/2020']
splitted = list(more_itertools.split_at(lst, lambda x:x in ('1','2')))
print(splitted)
输出:

[[], ['16SCSE102014', '15/03/2019', '16SCSE101350', '15/03/2019'], ['16SCSE102020', '02/02/2020']]

请注意,由于“2”是lst的第一个元素,所以拆分的第一个元素是空列表,由于此列表有趣,您被拆分为[1]和[2]。

您可以简单地迭代列表。这可能不是最具python风格或效率的方法,但您没有指定任何需求,因此它也可能是适合您的用例的最佳方法

数据=['2','16SCSE102014','2019年3月15日','16SCSE101350','2019年3月15日','1','16SCSE102020','2020年2月2日'] 列表1=[] 列表2=[] x=0 而x 注意:如果不再需要原始列表,您可以使用list.pop,这会稍微简化代码:

数据=['2','16SCSE102014','2019年3月15日','16SCSE101350','2019年3月15日','1','16SCSE102020','2020年2月2日'] 列表1=[] 列表2=[] 而数据: count=intdata.pop0 对于rangecount中的i: list1.appenddata.pop0 list2.appenddata.pop0
到目前为止你尝试了什么?给我们看看你的代码!此代码不起作用。在某些迭代中,它会将i+1项附加到日期,在下一次迭代中,它会将相同的项附加到字符串中。谢谢@AlexanderDmitriev,现在已经修复了。这是在web浏览器中编写代码而不进行检查的结果,但仍然不起作用。Python范围循环与C for循环不同,因为您不能修改变量。