比较python中的列表值
Posted
技术标签:
【中文标题】比较python中的列表值【英文标题】:comparing list values in python 【发布时间】:2020-02-05 04:20:13 【问题描述】:我有一个定义为 list1 la
的列表,其中我有一些值,而 list2 lb
也有一些值,现在我想匹配两个列表中的值,如果 list2 包含 list1 中的任何匹配项然后创建一个匹配的列表以及另一个列表,我将根据条件映射另一个列表gh
或mn
值,一旦完成,它应该创建一个最终列表,其中只有 list1 中的值。到目前为止我所尝试的并没有提供所需的输出。
lb=[1,2,3,4,5,6]
la = [1,2,3,4,8]
cd=[]
ef=[]
gh=[]
ij=[]
mn=[]
for keya in la: #main list
ef.append('0') #main val
if (x in la for x in lb):
cd=(la and lb)
gh.append('1')
d1 = ['Tpj_id': a, 'status': t for a, t in zip(cd, gh)]
d2 = ['Tpj_id': s, 'status': j for s, j in zip(la, ef)]
if len(cd) == 0:
#print(d2)
d4=d2
print(d4)
else:
ij=[elem for elem in la if elem not in lb]
for keyg in ij:
mn.append('0')
d3 = ['Tpj_id': o, 'status': p for o, p in zip(ij, mn)]
d4 = d3 + d1
print(d4)
当前输出:
["Tpj_id": 1, "status": "1", "Tpj_id": 2, "status": "1", "Tpj_id": 3, "status": "1", "Tpj_id": 4, "status": "1", "Tpj_id": 5, "status": "1", "Tpj_id": 6, "status": "1", "Tpj_id": 8, "status": "0"]
想要的输出:
["Tpj_id": 1, "status": "1", "Tpj_id": 2, "status": "1", "Tpj_id": 3, "status": "1", "Tpj_id": 4, "status": "1", "Tpj_id": 8, "status": "0"]
【问题讨论】:
您能解释一下您要执行的操作吗?我很难理解你写的描述。 @AMC 所以我有两个包含一些值的列表,我正在比较它们,现在如果在 list1 中有来自 list2 的值,则将值存储在匹配的单独列表中,然后附加状态 1给他们。 @AMC 基本上我想要实现的是,如果在列表la
中有匹配的元素在列表lb
中,那么无论匹配的元素是什么,我们应该有状态 1 休息 0
为什么使用 1/0 而不是布尔值?
@AMC 因为对这些数据的进一步评估对布尔值没有任何用处,但对数字数据类型没有任何用处:-)
【参考方案1】:
你可以试试这个
lb=[1,2,3,4,5,6]
la = [1,2,3,4,8]
non_comn_list = [item for item in la if item not in lb]
com_list = [item for item in la if item not in non_comn_list]
list = ['Tpj_id': a, 'status': 1 for a in com_list]
[list.append(val) for val in ['Tpj_id': a, 'status': 0 for a in non_comn_list]]
list
输出
['Tpj_id': 1, 'status': 1,
'Tpj_id': 2, 'status': 1,
'Tpj_id': 3, 'status': 1,
'Tpj_id': 4, 'status': 1,
'Tpj_id': 8, 'status': 0]
【讨论】:
我得到这样的 o/P['Tpj_id': 1, 'status': 1, 'Tpj_id': 2, 'status': 1, 'Tpj_id': 3, 'status': 1, 'Tpj_id': 4, 'status': 1, 'Tpj_id': 8, 'status': 1, []]
我不希望在 list
数据中出现额外的空列表以上是关于比较python中的列表值的主要内容,如果未能解决你的问题,请参考以下文章