Python - 过滤匹配给定模式的两个列表中的项目
Python - Filter items in two lists matching given pattern
我的 Python 代码中有 3 个列表:
ListIterationData = ["01-2021", "02-2021"]
ListOne = ["FileName1-01-2021", "FileName1-02-2021", "FileName1-03-2021", "FileName1-04-2021"]
ListTwo = ["Filename2-01-2021", "Filename2-05-2021"]
用例:
作为用户,我想遍历“ListIterationData”中的项目,并在“ListOne”和“ListTwo”中找到以 ListIterationData[i] 结尾的匹配项目。
“ListIterationData”中的项目将用作“ListOne”和“ListTwo”中的匹配模式。
类似于:
ListOne_Filtered = []
ListTwo_Filtered = []
For item in ListIteration Data:
if item in ListOne endswith ListIterationData[i] AND item in ListTwo endswith ListIterationData[i]
Then append both ListOne_Filtered and ListOne_Filtered
以下是我的预期结果:
ListOne_Filtered = ["FileName1-01-2021"]
ListTwo_Filtered = ["Filename2-01-2021"]
非常感谢您的帮助
试试这个:
ListOne_Filtered, ListTwo_Filtered = [], []
for i in range(min(len(ListIterationData), len(ListOne), len(ListTwo))):
if ListOne[i].endswith(ListIterationData[i]) and ListTwo[i].endswith(ListIterationData[i]):
ListOne_Filtered.append(ListOne[i])
ListTwo_Filtered.append(ListTwo[i])
你可以用正则表达式解决这个问题:
ListIterationData = ["01-2021", "02-2021"]
ListOne = ["FileName1-01-2021", "FileName1-02-2021", "FileName1-03-2021", "FileName1-04-2021"]
ListTwo = ["Filename2-01-2021", "Filename2-05-2021"]
list_one_filtered = []
list_two_filtered = []
for item in ListIterationData:
for file_one, file_two in zip(ListOne, ListTwo):
if re.search(item + "$", file_one) and re.search(item + "$", file_two):
list_one_filtered.append(file_one)
list_two_filtered.append(file_two)
print(list_one_filtered) # ['FileName1-01-2021']
print(list_two_filtered) # ['Filename2-01-2021']
因此遍历您的迭代数据,并同时遍历列表一和列表二,然后使用 "$"
符号作为锚点检查两个文件是否以所需结尾的正则表达式结尾。
我的 Python 代码中有 3 个列表:
ListIterationData = ["01-2021", "02-2021"]
ListOne = ["FileName1-01-2021", "FileName1-02-2021", "FileName1-03-2021", "FileName1-04-2021"]
ListTwo = ["Filename2-01-2021", "Filename2-05-2021"]
用例: 作为用户,我想遍历“ListIterationData”中的项目,并在“ListOne”和“ListTwo”中找到以 ListIterationData[i] 结尾的匹配项目。 “ListIterationData”中的项目将用作“ListOne”和“ListTwo”中的匹配模式。 类似于:
ListOne_Filtered = []
ListTwo_Filtered = []
For item in ListIteration Data:
if item in ListOne endswith ListIterationData[i] AND item in ListTwo endswith ListIterationData[i]
Then append both ListOne_Filtered and ListOne_Filtered
以下是我的预期结果:
ListOne_Filtered = ["FileName1-01-2021"]
ListTwo_Filtered = ["Filename2-01-2021"]
非常感谢您的帮助
试试这个:
ListOne_Filtered, ListTwo_Filtered = [], []
for i in range(min(len(ListIterationData), len(ListOne), len(ListTwo))):
if ListOne[i].endswith(ListIterationData[i]) and ListTwo[i].endswith(ListIterationData[i]):
ListOne_Filtered.append(ListOne[i])
ListTwo_Filtered.append(ListTwo[i])
你可以用正则表达式解决这个问题:
ListIterationData = ["01-2021", "02-2021"]
ListOne = ["FileName1-01-2021", "FileName1-02-2021", "FileName1-03-2021", "FileName1-04-2021"]
ListTwo = ["Filename2-01-2021", "Filename2-05-2021"]
list_one_filtered = []
list_two_filtered = []
for item in ListIterationData:
for file_one, file_two in zip(ListOne, ListTwo):
if re.search(item + "$", file_one) and re.search(item + "$", file_two):
list_one_filtered.append(file_one)
list_two_filtered.append(file_two)
print(list_one_filtered) # ['FileName1-01-2021']
print(list_two_filtered) # ['Filename2-01-2021']
因此遍历您的迭代数据,并同时遍历列表一和列表二,然后使用 "$"
符号作为锚点检查两个文件是否以所需结尾的正则表达式结尾。