Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.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_List_Loops_Subset - Fatal编程技术网

Python中的快速子集子列表

Python中的快速子集子列表,python,list,loops,subset,Python,List,Loops,Subset,我有一个包含数千条记录的子列表。 列表中的示例如下: list_full = [ [343, 354,"Sometext1", "Sometext2", "Sometext3"], [43543, 345435,"Sometext1", "Sometext2", "Sometext3"], [4354, 54354,"Sometext1", "Sometext2", "Sometext3", "Sometext4", "Sometext5"] ] 我想

我有一个包含数千条记录的子列表。 列表中的示例如下:

list_full = [
    [343, 354,"Sometext1", "Sometext2", "Sometext3"],
    [43543, 345435,"Sometext1", "Sometext2", "Sometext3"],
    [4354, 54354,"Sometext1", "Sometext2", "Sometext3",
         "Sometext4", "Sometext5"]
]
我想把这个主列表分为两个独立的列表。第一个列表应包含子列表中的前两条记录,第二个列表包含其余记录。 例如,我需要将它们存储为:

list_a = [[343, 354], [43543, 345435], [004354, 54354]]
list_b = [["Sometext1", "Sometext2", "Sometext3"], ["Sometext1", "Sometext2", "Sometext3"], ["Sometext2", "Sometext3", "Sometext4", "Sometext5"]]
我有以下脚本:

list_1 = []
list_2 = []

for item in list_full:
    list_1.append(item[:2])
    list_2.append(item[2:])

但是使用循环,速度有点慢。有没有更快的方法来执行此列表子集?谢谢

我会懒洋洋地使用
itertools

import itertools

list1 = itertools.imap(lambda x: itertools.islice(x, 0, 2), list_full)
list1 = itertools.imap(lambda x: itertools.islice(x, 2, None), list_full)

这样,在您需要计算之前,不会对其进行计算。请注意,如果希望立即对其求值,可以调用
list()
将itertools对象转换为列表。

我会懒散地使用
itertools

import itertools

list1 = itertools.imap(lambda x: itertools.islice(x, 0, 2), list_full)
list1 = itertools.imap(lambda x: itertools.islice(x, 2, None), list_full)
这样,在您需要计算之前,不会对其进行计算。请注意,如果希望立即对其求值,可以调用
list()
将itertools对象转换为列表。

尝试以下操作:

# to create two lists
list_1 = [x[:2] for x in list_full]
list_2 = [x[2:] for x in list_full]

# to create two generators, supporting iteration (with for) but not indexing
list_1 = (x[:2] for x in list_full)
list_2 = (x[2:] for x in list_full)
或者,在python 3中,在不创建列表的情况下轻松迭代数据:

for a, b, *other in list_full:
    print("first:", a, b)
    print("other:", other)
试试这个:

# to create two lists
list_1 = [x[:2] for x in list_full]
list_2 = [x[2:] for x in list_full]

# to create two generators, supporting iteration (with for) but not indexing
list_1 = (x[:2] for x in list_full)
list_2 = (x[2:] for x in list_full)
或者,在python 3中,在不创建列表的情况下轻松迭代数据:

for a, b, *other in list_full:
    print("first:", a, b)
    print("other:", other)

你可以试试列表理解

list_1=[item[:2] for item in list_full]
list_2 = [item[2:] for item in list_full]
根据一些列表,理解要比循环快得多

您可以使用
timeit
计算这两种方法所用的时间

from timeit import default_timer as timer
start=timer()
list_1 = []
list_2 = []

for item in list_full:
    list_1.append(item[:2])
    list_2.append(item[2:])

print list_1
print list_2

end=timer()

print end-start #Takes 0.0002339
在使用列表理解时

from timeit import default_timer as timer
start = timer()
list_1=[item[:2] for item in list_full]
list_2 = [item[2:] for item in list_full]

print list_1
print list_2

end = timer()

print end-start #gives 0.0002105

你可以试试列表理解

list_1=[item[:2] for item in list_full]
list_2 = [item[2:] for item in list_full]
根据一些列表,理解要比循环快得多

您可以使用
timeit
计算这两种方法所用的时间

from timeit import default_timer as timer
start=timer()
list_1 = []
list_2 = []

for item in list_full:
    list_1.append(item[:2])
    list_2.append(item[2:])

print list_1
print list_2

end=timer()

print end-start #Takes 0.0002339
在使用列表理解时

from timeit import default_timer as timer
start = timer()
list_1=[item[:2] for item in list_full]
list_2 = [item[2:] for item in list_full]

print list_1
print list_2

end = timer()

print end-start #gives 0.0002105


从您的问题陈述来看,您似乎正在处理某种结构化数据。我建议去看看熊猫图书馆,因为它似乎是一个潜在的长期图书馆。它将允许您执行切片、索引和更多功能。我认为您当前的方法很好,其他可能的方法(如列表理解或
map
)将需要在
list\u full
上迭代两次,而不是一次。请向您咨询技巧。不过,列表理解速度似乎更快。从您的问题陈述来看,您似乎正在处理某种结构化数据。我建议去看看熊猫图书馆,因为它似乎是一个潜在的长期图书馆。它将允许您执行切片、索引和更多功能。我认为您当前的方法很好,其他可能的方法(如列表理解或
map
)将需要在
list\u full
上迭代两次,而不是一次。请向您咨询技巧。列表理解似乎更快。我测试了一小部分数据,你的答案是最快的。谢谢我按照建议在更大的数据样本上进行了测试,结果证明使用itertools速度更快。我会记住对较小子集的列表理解!:)我测试了一小部分数据,你的答案是最快的。谢谢我按照建议在更大的数据样本上进行了测试,结果证明使用itertools速度更快。我会记住对较小子集的列表理解!:)谢谢你的回答。在一小部分数据上,我发现列表理解速度更快。@Litwos,是的,对于小数据,itertools可能会更慢,但当你有大量数据时,想想看:)我在一个更大的子集上再次测试,它比列表理解速度更快。谢谢你谢谢你的回答。在一小部分数据上,我发现列表理解速度更快。@Litwos,是的,对于小数据,itertools可能会更慢,但当你有大量数据时,想想看:)我在一个更大的子集上再次测试,它比列表理解速度更快。谢谢,我不能使用生成器,因为我需要索引。在数据子集上,列表理解是最快的。谢谢我不能使用生成器,因为我需要索引。在数据子集上,列表理解是最快的。谢谢