【问题标题】:Combining common elements of two lists into one将两个列表的共同元素合二为一
【发布时间】:2014-03-17 08:38:39
【问题描述】:

所以我正在尝试编写一个程序,它将两个列表作为输入,然后将公共元素组合成一个新列表。问题是我的代码一直返回一个空列表。有谁知道我应该写什么来解决这个问题?到目前为止,这是我的代码:

def main():
    a = list(input("Enter list one: "))
    b = list(input("Enter list two: "))
    newlist1 = intersection(a,b)
    print(newlist1)

def intersection(a,b):
    a = []
    b = []
    newlist = [] 

    for i in range(len(a)):
        for j in range(len(b)):
            if a[i] == b[j]:
                for k in range(len(newlist)):
                    if newlist[k] != a[i]:
                         newlist.append(a[i])

    return newlist
main()

编辑:感谢 cmets 伙计们。我已经编辑了一些部分并对其进行了更改,但仍在努力。我只需要确保在列表输入中忽略逗号。到目前为止,这是我所拥有的:

def main():
    a = list(input("Enter list one: "))
    b = list(input("Enter list two: "))
    for i in a:
        a[i]=int(a[i])
    for i in b:
        b[i]=int(b[i])
    newlist1 = intersection(a,b)
    print(newlist1)

def intersection(a,b):
    newlist = [0] 

    for i in a:
        for j in b:
            if a[i] == b[j]:
                for k in newlist:
                    if k != a[i]:
                        newlist.append(a[i])
                    else:
                        continue

    return newlist

【问题讨论】:

  • 你可能想看看这个:stackoverflow.com/questions/2727650/…
  • 您在函数intersection 的开头定义a=[]b=[]。当然,两个空列表的交集是空列表。
  • 为什么不能使用集合推导? dict({i for i in a if i in b})

标签: python


【解决方案1】:

您有for k in range(len(newlist)):,其中len(newlist) 始终为0

你想要这个

 for i in range(len(a)):
        for j in range(len(b)):
            if a[i] == b[j]:

                already_added = False
                for k in range(len(newlist)):
                    if newlist[k] == a[i]:
                         already_added = True
                         break

                if not already_added:
                    newlist.append(a[i])

不过,这是一种相当不合常理的方式。为什么不用一套呢?

icedtrees 也是如此。这是另一个问题。您可以通过删除两个分配a = []b = [] 来修复icedtrees 问题。这些行会覆盖传递给函数的参数值并丢弃您传递给它的任何信息。

【讨论】:

    【解决方案2】:

    您也可以使用集合,这可能更合适。

    a = list()
    b = list()
    
    set_a = set(a)
    set_b = set(b)
    
    intersection = set_a.intersection(set_b)   # you have to convert to sets
    
    intersection_list = list(intersection)     # convert back to list if you need it
    

    请注意,这并不能保证订购,并且多份的商品只会被复制一次。无论如何,排序和倍数都是您必须仔细考虑的事情。

    【讨论】:

      猜你喜欢
      • 2014-08-02
      • 2020-06-19
      • 2013-07-05
      • 2018-11-27
      • 2011-08-22
      • 1970-01-01
      • 2017-10-01
      • 2020-01-27
      相关资源
      最近更新 更多