Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从两个列表中查找相同的元素,并打印两个列表中的元素_Python - Fatal编程技术网

Python 从两个列表中查找相同的元素,并打印两个列表中的元素

Python 从两个列表中查找相同的元素,并打印两个列表中的元素,python,Python,有两个列表: k = ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'e'] l = ['a', 'c', 'e'] 我想从这两个列表中找到相同的元素,即: ['a','c','e'] 然后我想打印出我们找到的元素,例如,两个列表中的'a',即:['a','a','a'] 我想要的结果如下: ['a', 'a', 'a', 'c', 'c', 'c', 'e', 'e'] 我试着这样做: c = [] for item_k in k: for item_j i

有两个列表:

k = ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'e']
l = ['a', 'c', 'e']
我想从这两个列表中找到相同的元素,即:
['a','c','e']

然后我想打印出我们找到的元素,例如,两个列表中的'a',即:
['a','a','a']

我想要的结果如下:

['a', 'a', 'a', 'c', 'c', 'c', 'e', 'e']
我试着这样做:

c = []
for item_k in k:
   for item_j in j:
      if item_k== item_j:
          c.append(item_k)
      c.append(item_j)
c=[]
for item_k in k:
   if item_k in l:
      c.append(item_k)
      d=l.count(item_k)
      c.append(item_k*d)
      print c
但是,结果是
['a','a','c','c','e','e']

同样,通过这种方式:

c = []
for item_k in k:
   for item_j in j:
      if item_k== item_j:
          c.append(item_k)
      c.append(item_j)
c=[]
for item_k in k:
   if item_k in l:
      c.append(item_k)
      d=l.count(item_k)
      c.append(item_k*d)
      print c

但它不起作用,有人能告诉我怎么做吗?非常感谢您提前提供的帮助

因为您希望从两个列表中提取元素,最直接的方法可能是在检查另一个列表的同时对这两个列表进行迭代(如果您依赖于执行此操作的速度,这是高度优化的):


。。如果元素的顺序很重要,您必须定义一个迭代顺序(您从哪个数组中查看哪个元素的顺序是什么?)

由于您希望从两个列表中提取元素,最直接的方法可能是在检查另一个列表的同时对这两个列表进行迭代(如果您依赖速度来完成此操作,则这是高度优化的):

…如果元素的顺序很重要,那么您必须定义一个迭代顺序(您从哪个数组中查看哪个元素的顺序?)

结果:

['a','a','c','c','e','e']

结果:

['a','a','c','c','e','e']


如果列表已排序,并且您希望对结果进行排序:

sorted([x for x in list1 if x in set(list2)] + [x for x in list2 if x in set(list1)] )

如果列表已排序,并且您希望对结果进行排序:

sorted([x for x in list1 if x in set(list2)] + [x for x in list2 if x in set(list1)] )

可以使用集合操作进行相交,然后循环,将与相交列表匹配的任何列表追加到新列表

k = ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'e']
l = ['a', 'c', 'e']

common_list = list(set(k).intersection(set(l)))

all_results = []

for item in k:
    if item in common_list:
        all_results.append(item)

for item in l:
    if item in common_list:
        all_results.append(item)

print sorted(all_results)
输出:

['a','a','c','c','e','e']


可以使用集合操作进行相交,然后循环,将与相交列表匹配的任何列表追加到新列表

k = ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'e']
l = ['a', 'c', 'e']

common_list = list(set(k).intersection(set(l)))

all_results = []

for item in k:
    if item in common_list:
        all_results.append(item)

for item in l:
    if item in common_list:
        all_results.append(item)

print sorted(all_results)
输出:

['a','a','c','c','e','e']


这里有一个简洁的方法。可读性可能会受到一些影响,但是没有一点破译的理解又有什么乐趣呢

import itertools
k = ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'e']
l = ['a', 'c', 'e']

combined = [letter for letter in itertools.chain(k,l) if letter in l and letter in k]

这里有一个简洁的方法。可读性可能会受到一些影响,但是没有一点破译的理解又有什么乐趣呢

import itertools
k = ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'e']
l = ['a', 'c', 'e']

combined = [letter for letter in itertools.chain(k,l) if letter in l and letter in k]

以下是与初始算法匹配的实现:

k = ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'e']
l=['a', 'c', 'e']
c=[]
for x in l:
    count = 0
    for y in k:
        if x == y:
            count += 1
    while count>=0:
        c.append(x)
        count = count -1

print c

以下是与初始算法匹配的实现:

k = ['a', 'a', 'b', 'b', 'c', 'c', 'd', 'e']
l=['a', 'c', 'e']
c=[]
for x in l:
    count = 0
    for y in k:
        if x == y:
            count += 1
    while count>=0:
        c.append(x)
        count = count -1

print c

这比第一个要慢:-)@user3100115不是,完全一样。@user3100115你真的担心优化一个包含10个元素的列表的小操作吗?如果你想让它快一点(特别是如果列表
k
l
比OP的示例中的要大的话),您可以使用
set
s来获取公共元素:
common=set(k)&set(l)
,现在只需检查
if x in common
而不是
if x in k和x in l
事实上,列表很大(从一个大的txt文件读取,超过1000万行,每行包含8个元素)。没错,使用集合比使用列表更快。然而,有人告诉我要用字典。我需要通过一个简单的例子知道怎么做。非常感谢你的帮助!这比第一个要慢:-)@user3100115不是,完全一样。@user3100115你真的担心优化一个包含10个元素的列表的小操作吗?如果你想让它快一点(特别是如果列表
k
l
比OP的示例中的要大的话),您可以使用
set
s来获取公共元素:
common=set(k)&set(l)
,现在只需检查
if x in common
而不是
if x in k和x in l
事实上,列表很大(从一个大的txt文件读取,超过1000万行,每行包含8个元素)。没错,使用集合比使用列表更快。然而,有人告诉我要用字典。我需要通过一个简单的例子知道怎么做。非常感谢你的帮助!你提供的代码帮我节省了大约10个小时的工作,非常感谢!你提供的代码帮我节省了大约10个小时的工作,非常感谢!阅读你所有的解决方案真的给了我很多启发!阅读你所有的解决方案真的给了我很多启发!您的代码真的帮助我提高了编码水平,谢谢您的代码真的帮助我提高了编码水平,谢谢