簡體   English   中英

根據python中的另一個列表匹配列表的元素,其中一個列表的元素是另一個列表的子字符串

[英]match element of a list based on another list in python where elements of one list is the substring of elements of another list

listA = ['abcd754_efgh_20160110_165623.frf', 'abcd754_efghijk_20160110_162419.frf', 'abcd755_mno_20160110_165287.frf', 'abcd755_mnopqr_20160110_164562.frf'  ]
listB = ['abcd754_efgh', 'abcd754_efghijk_', 'abcd755_mno_', 'abcd755_mnopqr_']

我有列表A和列表B。列表A有時可能缺少一個或兩個元素。 基於此,我需要通過保持相同順序在列表B中創建元素包含列表C。

我一直找不到解決方案。

您可以執行以下操作:

listA = ['abcd754_efgh_20160110_165623.frf', 'abcd754_efghijk_20160110_162419.frf', 'abcd755_mno_20160110_165287.frf']
listB = ['abcd754_efgh', 'abcd754_efghijk_', 'abcd755_mno_', 'abcd755_mnopqr_']
listC = []

for b in listB:
    if any(a.startswith(b) for a in listA):
        listC.append(b)

print listC

輸出['abcd754_efgh', 'abcd754_efghijk_', 'abcd755_mno_']

您沒有指定是否要讓listB中的元素存在於listA中,或者是否不在listA中,因此,如果要使用其他方法,請在any元素之前添加一個not

這是一個簡單的二次方解決方案,如果您有很多元素,則需要更有效的方法

使用listcomp可以說:

listC = [b for b in listB if any(b in a for a in listA)]

對於

listA = ['abcd754_efgh_20160110_165623.frf', 'abcd754_efghijk_20160110_162419.frf', 'abcd755_mno_20160110_165287.frf']
listB = ['abcd754_efgh', 'abcd754_efghijk_', 'abcd755_mno_', 'abcd755_mnopqr_']

此打印

['abcd754_efgh', 'abcd754_efghijk_', 'abcd755_mno_']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM