给定一个列表,如何找到相同值在不同列表中的索引位置?

2024-06-03 04:10:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为背包算法创建一个解密函数。我是Python编程新手。我需要找到一个数组中的值在另一个数组中出现的位置,为这些值编制索引,将索引值设置为“1”,并将其他列表中没有等效值的值设置为“0”

假设:

privkey = [2,3,6,13,27,52]
searchList = [3,6]

由于searchList中的[3,6]出现在privkey[1]和privkey[2]位置,我希望代码在新列表中将这些索引设置为二进制“1”。所以新值应该是newList=[0,1,1,0,0,0]

到目前为止,我尝试的是:

newList = []
for i in privkey:
if (privkey[i]==searchList[i]):
    newList = append(privkey.index(i)) # should yield newList = [1,2]  
    print(newList)
else:
    print("none")

我真的不知道如何使用索引将privkey中的值设置为“1”值。任何帮助都将不胜感激。谢谢


Tags: 函数代码算法列表编程二进制数组中将
2条回答

使用列表理解有一个简单的解决方案,但是由于它需要在searchList上进行许多成员资格测试,因此应该首先创建一个集合:

>>> search_set = set(searchList)
>>> [ int(x in search_set) for x in privkey ]
[0, 1, 1, 0, 0, 0]

test x in search_set返回一个布尔值,使用int函数将其转换为1或0

如果privkey的长度为m,searchList的长度为n,则此解在O(m+n)时间内运行,并使用O(m+n)空间。没有集合的解是O(mn)时间和O(m)空间,对于较大的输入,这将相当慢

您可以使用列表理解:

>>> privkey = [2,3,6,13,27,52]
>>> searchList = [3,6]
>>> [int(x in searchList) for x in privkey]
[0, 1, 1, 0, 0, 0]

https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions

相关问题 更多 >