Python 当两个列表中都有基于索引的匹配项时,如何解码列表并从两个列表中删除项目?
我有两个列表,其中包含以下类型的信息Python 当两个列表中都有基于索引的匹配项时,如何解码列表并从两个列表中删除项目?,python,Python,我有两个列表,其中包含以下类型的信息 List #1: Request_List = ["1/1/1.34", "1/2/1.3.5", "1/3/1.2.3", ...same format elements] List #2: Reply_List = ["1/1/0", "1/3/1", "1/2/0", ...same format elements] 从“回复”列表中,我希望能够将“#/#/#”中的第二项与回复列表中的所有项进行比较,在本例中为1、3、2,依此类推,并检查是否与“请求
List #1:
Request_List = ["1/1/1.34", "1/2/1.3.5", "1/3/1.2.3", ...same format elements]
List #2:
Reply_List = ["1/1/0", "1/3/1", "1/2/0", ...same format elements]
从“回复”列表中,我希望能够将“#/#/#”中的第二项与回复列表中的所有项进行比较,在本例中为1、3、2,依此类推,并检查是否与“请求列表”中的第二项相匹配。如果存在匹配项,那么我希望能够返回一个新列表,该列表将包含请求字符串中第三个索引的信息,并在回复中附加匹配字符串的第三个索引
The result would be like the following.
Result = ["1.34.0", "1.3.5.0", "1.2.3.1"]
注意,0被添加到1.34,1被添加到1.3.4,0被添加到1.2.3,从“回复”列表中的相应索引中提取,作为“回复”列表中存在的第二个索引。“回复”列表可以将项目放置在列表中的任何位置
解决上述问题的代码如下所示
def get_list_of_error_codes(self, Reply_List , Request_List ):
decoded_Reply_List = Reply_List .decode("utf-8") # I am not sure if this is
the right way to decode all the elements in the list?
Result = [
f"{i.split('/')[-1]}.{j.split('/')[-1]}"
for i in Request_List
for j in decoded_Reply_List
if (i.split("/")[1] == j.split("/")[1])
]
return Result
我现在面临的问题是:
回复列表
。有人能帮我验证一下吗回复列表
和请求列表
的相应项decoded\u Reply\u List=[li.decode(encoding='utf-8')用于回复列表中的li]
break
,这样我们就不会在找到匹配项时继续寻找匹配项。它只会匹配第一对,然后继续
在for i In list(Request_list)
中,我添加了list()
强制转换以有效地复制列表。这允许我们在不中断循环的情况下从Request_list
中删除条目。我没有对解码的回复列表中的j执行此操作,因为它已经是回复列表
的副本。(我假设您想从回复列表中删除条目
)
最后是else:continue
。我们不想到达请求列表。如果没有找到匹配项,请删除(i)
。如果调用break
,则不会调用else
,这意味着我们将到达请求列表。删除(i)
。但是如果循环完成时没有找到匹配项,则循环将进入else
,我们将通过调用continue
跳过删除步骤
编辑:
实际上,Reply\u List.remove(j)
中断,因为我们在这种方法中解码了j
,因此解码的j
与Reply\u List
中的对象不同。下面是一些修改后的代码,可以解决这个问题:
def get_list_of_error_codes(Reply_List, Request_List):
# decoded_Reply_List = [li.decode(encoding='utf-8') for li in Reply_List]
Result = []
for i in list(Request_List):
for j in list(Reply_List):
dj = j.decode(encoding='utf-8')
if (i.split("/")[1] == dj.split("/")[1]):
Result.append(f"{i.split('/')[-1]}.{dj.split('/')[-1]}")
Reply_List.remove(j)
break
else:
continue
Request_List.remove(i)
return Result
Request_List = ["1/1/1.34", "1/2/1.3.5", "1/3/1.2.3"]
Reply_List = [b"1/1/0", b"1/3/1", b"1/2/0"]
print("Result: ", get_list_of_error_codes(Reply_List, Request_List))
print("Reply_List: ", Reply_List)
print("Request_List: ", Request_List)
# Output:
# Result: ['1.34.0', '1.3.5.0', '1.2.3.1']
# Reply_List: []
# Request_List: []
我所做的不是创建一个单独的解码列表,而是在条目循环时对其进行解码,然后从
Reply\u列表
中删除未解码的条目。这也应该更有效一些,因为我们现在不会在Reply\u列表
中循环两次。非常感谢您的持续帮助。我我也会尝试解决你提到的编辑问题。但是解码不是只删除b''
字段吗?@LauraSmith我已经添加了编辑过的代码。现在应该可以了。@LauraSmith我假设你正在处理的数据需要解码。我用于回复列表的示例列表
我使用了b''
,因为该示例将如果我使用字符串,请中断,因为您无法解码字符串。如果Reply\u List
只是一个字符串列表,您可以完全忽略解码步骤。我正在列表中存储json回复,这看起来很好。我将进一步测试它,但对我来说很好。非常感谢。:)@LauraSmith不客气!如果您正在存储json回复,也许您想查看json
库。具体来说是json.loads()
。祝您好运!
def get_list_of_error_codes(self, Reply_List, Request_List):
decoded_Reply_List = [li.decode(encoding='utf-8') for li in Reply_List]
Result = []
for i in list(Request_List):
for j in decoded_Reply_List:
if (i.split("/")[1] == j.split("/")[1]):
Result.append(f"{i.split('/')[-1]}.{j.split('/')[-1]}")
Reply_List.remove(j)
break
else:
continue
Request_List.remove(i)
return Result
Request_List = ["1/1/1.34", "1/2/1.3.5", "1/3/1.2.3"]
Reply_List = [b"1/1/0", b"1/3/1", b"1/2/0"]
print(get_list_of_error_codes("Foo", Reply_List, Request_List))
# Output: ['1.34.0', '1.3.5.0', '1.2.3.1']
def get_list_of_error_codes(Reply_List, Request_List):
# decoded_Reply_List = [li.decode(encoding='utf-8') for li in Reply_List]
Result = []
for i in list(Request_List):
for j in list(Reply_List):
dj = j.decode(encoding='utf-8')
if (i.split("/")[1] == dj.split("/")[1]):
Result.append(f"{i.split('/')[-1]}.{dj.split('/')[-1]}")
Reply_List.remove(j)
break
else:
continue
Request_List.remove(i)
return Result
Request_List = ["1/1/1.34", "1/2/1.3.5", "1/3/1.2.3"]
Reply_List = [b"1/1/0", b"1/3/1", b"1/2/0"]
print("Result: ", get_list_of_error_codes(Reply_List, Request_List))
print("Reply_List: ", Reply_List)
print("Request_List: ", Request_List)
# Output:
# Result: ['1.34.0', '1.3.5.0', '1.2.3.1']
# Reply_List: []
# Request_List: []