gpt4 book ai didi

python - 与引用列表比较以转换为二进制编码

转载 作者:行者123 更新时间:2023-12-01 00:34:19 28 4
gpt4 key购买 nike

我有一个这样的引用列表

ref = ['August', 'July', 'June', 'May', 'April']

以及一些示例列表

list1 = ['July', 'April']
list2 = ['August']
list3 = ['August', 'June', 'April']
list4 = ['April', 'June', 'May'] # Not sorted in decreasing order, as others

我想将每个列表的元素与引用列表进行比较,如果元素存在则更改为 1,否则为 0

因此,当我运行一个函数时,我的预期输出是

compare(ref, list1) - [0, 1, 0, 0, 1]
compare(ref, list2) - [1, 0, 0, 0, 0]
compare(ref, list3) - [1, 0, 1, 0, 1]

对于list4,我需要先将其按降序排序,然后进行比较

list4 = ['June', 'May', 'April']
compare(ref, list3) - [0, 0, 1, 1, 1]

目前,我的比较函数如下所示

def compare(lst1, lst2):

binary_list = [] #final list to return
j = 0 #counter to keep check on lst2
lst2_len = len(lst2) #length

for item in lst1: #main loop of ref list
if j < lst2_len: #check counter is less than len of other list
if item == lst2[j]:
binary_list.append(1)
j = j + 1
else:
binary_list.append(0)
else: # lst2 exhausted, append 0 to remaining months
binary_list.append(0)

return binary_list

我可以做得更好吗?我知道我的引用列表总是经过排序的。因此

  1. 如何按降序对包含月份的其他列表进行排序?
  2. 排序后,我需要将其转换为二进制编码,与引用列表进行比较。

我正在处理数百万条记录,并且使用 pandas apply 需要花费大量时间。其他列表位于一列中。

我可以优化它吗?

df = pd.DataFrame({'List2':[['July', 'April'], ['August'], ['August', 'June', 'April'], ['April', 'June', 'May']]})
>>df
List2
0 [July, April]
1 [August]
2 [August, June, April]
3 [April, June, May]

df['List2'].apply(lambda x: compare(ref, x))

最佳答案

由于 pandas 已被标记,因此您可以利用 series.isin()不需要排序的地方:

def compare(r,l):
s=pd.Series(r)
return s.isin(l).astype(int).tolist()
<小时/>
print(compare(ref,list1))
print(compare(ref,list2))
print(compare(ref,list3))
print(compare(ref,list4))
<小时/>
[0, 1, 0, 0, 1]
[1, 0, 0, 0, 0]
[1, 0, 1, 0, 1]
[0, 0, 1, 1, 1]

关于python - 与引用列表比较以转换为二进制编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57925025/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com