【问题标题】:get the elements from list which is prefix/suffix by any other character从列表中获取任何其他字符的前缀/后缀的元素
【发布时间】:2020-07-02 10:31:42
【问题描述】:

我有一个包含这么多元素的列表。一些元素是任何字母数字字符的前缀/后缀。

list1 = ["sign","xxsignzz","xxsign", "signzz","Design", "abc.sign.abc", "SIGN", "siGn"]
list2 = ["sign"]

我想要 list3,其中我将有类似的元素

list3=["xxsignzz","xxsign","signzz","Design","abc.sign.abc"]

我应该通过 list3 中的任何内容获取符号前缀/后缀的所有值。

谁能帮帮我。

【问题讨论】:

    标签: python python-3.x list python-2.7


    【解决方案1】:

    试试:

    [li for li in list1 if list2[0] in li and len(li)!=len(list2[0])]
    

    ['xxsignzz', 'xxsign', 'signzz', 'Design', 'abc.sign.abc']
    

    【讨论】:

      【解决方案2】:

      这是你要找的吗:

      lower = [l.lower() for l in list1]
      list3 = [el[0] for el in zip(list1, lower) if el[1] not in list2]
      
      >>> ['xxsignzz', 'xxsign', 'signzz', 'Design', 'abc.sign.abc']
      

      【讨论】:

        【解决方案3】:

        试试:

        list1 = ["sign", "xxsignzz","xxsign", "signzz","Design", "abc.sign.abc", "SIGN", "siGn"]
        list2 = ["sign"]
        
        
        output = [i for i in list1 for x in list2 if x in i and x.lower() != i.lower()]
        print(output) # ['xxsignzz', 'xxsign', 'signzz', 'Design', 'abc.sign.abc']
        

        【讨论】:

          【解决方案4】:

          使用正则表达式。

          例如:

          import re
          
          list1 = ["sign","xxsignzz","xxsign", "signzz","Design", "abc.sign.abc", "SIGN", "siGn"]
          list2 = ["sign"]
          ptrn = re.compile("|".join(list2) + r"\b", flags=re.I)
          print([i for i in list1 if not ptrn.match(i)])
          #--> ['xxsignzz', 'xxsign', 'signzz', 'Design', 'abc.sign.abc']
          

          【讨论】:

            【解决方案5】:

            解决此问题的 Pythonic 方法是使用 list comprehension。如果您的list2 包含多个元素,我已经处理了。

            list1 = ["sign", "xxsignzz","xxsign", "signzz","Design", "abc.sign.abc", "SIGN", "siGn"]
            list2 = ["sign"]
            
            result = [i for i in list1 for j in list2 if j in i and len(j) < len(i)]
            print(result)
            

            上面的列表推导等价于:

            result = []
            for i in list1:
                for j in list2:
                    if j in i and len(j) < len(i):
                        result.append(i)
            
            print(result)
            

            输出:

            ['xxsignzz', 'xxsign', 'signzz', 'Design', 'abc.sign.abc']
            

            【讨论】:

              猜你喜欢
              • 2015-07-23
              • 2022-10-30
              • 1970-01-01
              • 1970-01-01
              • 2020-06-23
              • 2013-02-20
              • 2023-04-05
              • 1970-01-01
              • 2015-09-15
              相关资源
              最近更新 更多