我有一个2个列表与数据,我想匹配,并收到第三个列表与'真'或'假'。但我需要创造一个特殊的匹配。下面是我的代码。
import pandas as pd
list1 = ['food', 'food', 'item']
list2 = ['apple fr', 'cherry fr', 'banana fr']
my_list1 = list(map(str, list1))
my_list2 = list(map(str, list2))
for i in range(len(my_list2)):
if my_list2[i] in [s for s in my_list2 if "fr" in s]:
my_list2[i] = 'food'
result = []
for i in range(int(len(my_list1))):
result.append(my_list1[i] == my_list2[i])
my_data1 = pd.DataFrame({'a': list1, 'b': list2, 'check': result})
print(my_data1)
输出:
a b check
0 food apple fr True
1 food cherry fr True
2 item banana fr False
基本上,我想使用下面的模式匹配列表的元素:如果list2中elem具有'fr',那么它应该在list1中的'food'元素上返回True。
正如你所看到的,我已经有了一种解决方案,我复制列表,编辑它们并比较编辑过的副本。然而,这种方法并不是最好的,因为它确实是内存消耗。也许可以使用“if”条件,而不是操作数据。有没有更好的办法呢?谢谢
2条答案
按热度按时间f87krz0w1#
如果我正确理解了这个检查,它只是一个问题“list1中的元素是否等于'food'(
df['a'] == 'food'
),(&
)list2中的元素是否以' fr'(df['b'].str.endswith(' fr')
)结尾。印刷品
注解:
endswith(' fr')
当然假设list2
的元素只有在以'fr'结尾时才应该匹配,而不是在任何地方都包含'fr',这是if "fr" in s
检查的(例如。fr in 'jackfruit'
将返回True
,尽管我假设您不希望这样)。wixjitnu2#
您也可以通过以下方式创建检查列: