[英]Use sets and lists in python to create a new list
我有以下动态数据,但以下是它可能的示例:
# An incoming List of lists with only ints
# For exampe the incoming_list could be:
incoming_list = [[1,2]. [3]]
# The indexes are like so:
0: [1,2]
1: [3]
然后我有一个 check_list ,其中包含一些示例数据(将是动态的),如下所示:
# A List[int] for check_list
check_list= [3]
如果任何传入列表数据在它的索引中,我然后需要获取incoming_list 上的第一个int:
# If the following were input:
incoming_list = [[1,2]. [3]]
check_list= [3]
# Then a new_list would be:
new_list = [3] because incoming_list has a list with 3 in it, and the
first element of that list is 3
##############################################################
# Another example ff the following were input:
incoming_list = [[1,2]. [3]]
check_list= [2,3]
# Then a new_list would be:
new_list = [1,3] because incoming_list has a 2 in the first index and
its first value is 1 and because incoming list has a 3 in the second index
and its first and only value is 3
我试图用 set list 组合来做到这一点,但我认为 List 部分把它搞砸了:
new_list = list(set(v for k, v in incoming_lists if int(k) in check_list))
任何想法如何使这些干净优雅?
虽然不是很清楚你的意思,但我认为这应该可以工作。
new_list = []
check = set(check_list)
for sublist in incoming_list:
for i in sublist:
if i in check and sublist[0] not in new_list:
new_list.append(sublist[0])
continue
print(new_list)
让我们尝试不同的incoming_list
和check_list
值。
incoming_list = [[1, 2], [3]]
check_list = [2]
# Result: [1]
incoming_list = [[1, 2], [3], [2, 3, 5], [7, 8], [4, 3]]
check_list = [3]
# Result: [3, 2, 4]
在一般情况下,将列表预处理为O(1)
查找结构可能是有意义的,该结构可以在线性时间内完成:
lookup = {}
for lst in reversed(incoming_list):
for x in lst:
lookup[x] = lst[0]
然后你可以简单地使用这个:
result = [lookup[x] for x in check_list]
针对问题中的给定输入实现所需结果的一种简单方法。 如果您正在寻找 1 行语句。
[l[0] for v in check_list for l in incoming_list if v in l]
In [33]: # EXAMPLE 1
In [34]: incoming_list = [[1,2], [3]]
In [35]: check_list= [3]
In [36]: [l[0] for v in check_list for l in incoming_list if v in l]
Out[36]: [3]
In [37]: # EXAMPLE 2
In [38]: incoming_list = [[1,2], [3]]
In [39]: check_list= [2,3]
In [40]: [l[0] for v in check_list for l in incoming_list if v in l]
Out[40]: [1, 3]
In [41]:
对于我们在最终结果中有重复项更改的情况,您可以更新单行语句。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.