【问题标题】:Edit a list while comparing it to another list as constraints编辑列表,同时将其与另一个列表作为约束进行比较
【发布时间】:2015-11-14 12:47:03
【问题描述】:

我有一个包含一些文字的列表,另一个列表里面只有需要的文字,我想得到一个包含相关文字及其符号的输出,我应该如何计算这个输出?非常感谢

list=[0,-1, 2, 3, 11, 12, -13, 21, -22, 23, 31, -32, 33, 50, 20, 30]

needed literals = [11, 12, 13, 21, 22, 23, 31, 32, 33]

output = [11, 12, -13, 21, -22, 23, 31, -32, 33]

编辑:每个文字也是一个字符串,例如:'11'、'-12' 等。

【问题讨论】:

    标签: python list compare


    【解决方案1】:

    使用列表推导很容易:

    literal_list = [0, -1, 2, 3, 11, 12, -13, 21, -22, 23, 31, -32, 33, 50, 20, 30]
    needed_literals = [11, 12, 13, 21, 22, 23, 31, 32, 33]
    output = [n for n in literal_list if abs(n) in needed_literals]
    #=> [11, 12, -13, 21, -22, 23, 31, -32, 33]
    

    如果两个列表的元素都是字符串而不是整数,则可以在条件中进行转换:

    output = [n for n in literal_list if str(abs(int(n))) in needed_literals]
    

    【讨论】:

      【解决方案2】:
      lis=[0,-1, 2, 3, 11, 12, -13, 21, -22, 23, 31, -32, 33, 50, 20, 30]
      
      literals = [11, 12, 13, 21, 22, 23, 31, 32, 33]
      
      output=[]
      li=0
      i=0
      for i in range(0,len(lis)-1):
         if mod(literals[li])==lis[i]:
            output.append(lis[i])
            li+=1
         i+=1
      print output
      

      【讨论】:

        【解决方案3】:
        input_list=[0,-1, 2, 3, 11, 12, -13, 21, -22, 23, 31, -32, 33, 50, 20, 30]
        needed_literals = [11, 12, 13, 21, 22, 23, 31, 32, 33]
        

        有重复:

        output = [ for i in input_list if abs(i) in needed_literals]
        

        没有重复:

        output = [ for i in set(input_list) if abs(i) in needed_literals]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-13
          • 1970-01-01
          相关资源
          最近更新 更多