繁体   English   中英

如何从列表中打印出差异为2的元素

[英]How to print out elements from the list that have the difference of 2

假设我们有一个仅包含整数的列表:

list = [1, 7, 12, 14, 22, 24, 29, 31, 39, 45, 77, 79, 85, 100]

现在,我想从该列表中打印出所有差异为2的元素对。因此,我希望我的程序接下来可以打印出:

12, 14

22, 24

29, 31

77, 79

我尝试了很多事情,但似乎找不到解决方案。

您可以使用itertools.combinations

from itertools import combinations

lst = [1, 7, 12, 14, 22, 24, 29, 31, 39, 45, 77, 79, 85, 100]

result = [(x, y) for x, y in combinations(lst, r=2) if abs(x - y) == 2]

for first, second in result:
    print(first, second)

输出量

12 14
22 24
29 31
77 79

简单的列表理解可以解决此问题:

l = [1, 7, 12, 14, 22, 24, 29, 31, 39, 45, 77, 79, 85, 100]
l1 = [(x1,x2) for x1 in l for x2 in l if (x1-x2 == 2)]
print(l1)
# [(14, 12), (24, 22), (31, 29), (79, 77)]

希望下面的代码满足您的要求。

list1 = [1, 7, 12, 14, 22, 24, 29, 31, 39, 45, 77, 79, 85, 100]

for x in list1:
    if x+2 in list1:
        print(x,", ",x+2)

如果您的列表已排序且没有重复元素,则仅在三个连续元素的组中可以找到2的差:

l = [1, 7, 12, 14, 22, 24, 29, 31, 39, 45, 77, 79, 85, 100]

l = sorted(set(l)) # if l is not sorted and has repeating elements

for a, b, c in zip(l, l[1:], l[2:]):
    if b - a == 2:
        print(a, b)
    elif c - a == 2:
        print(a, c)
# 12 14
# 22 24
# 29 31
# 77 79

与其尝试直接遍历循环,不如尝试使用整数来遍历循环,使用range(len(my_list))

my_list = [1, 7, 12, 14, 22, 24, 29, 31, 39, 45, 77, 79, 85, 100]
for i in range(len(my_list) - 1):
    if my_list[i+1] - my_list[i] == 2:
        print("%d, %d" % (my_list[i], my_list[i+1]))

输出:

12, 14
22, 24
29, 31
77, 79

使用itertools.combinations

from itertools import combinations as c
mlst = [1, 7, 12, 14, 22, 24, 29, 31, 39, 45, 77, 79, 85, 100]
print ([(i,j) for i,j in c(mlst,2) if abs(i-j) == 2])

# output: [(12, 14), (22, 24), (29, 31), (77, 79)]

您可以定义e方法,以根据条件返回连续对:

def each_cons(predicate, iterable):
  i, size = 0, len(iterable)
  while i < size-2:
    if predicate(iterable[i], iterable[i+1]):
      yield iterable[i:i+2]
    i += 1

然后只需调用它来设置条件:

array = [1, 7, 12, 14, 22, 24, 29, 31, 39, 45, 77, 79, 85, 100]

each_cons(lambda x, y: y - x == 2, array)
#=>  [[12, 14], [22, 24], [29, 31], [77, 79]]

@bobojmaj ,您也可以这样尝试。

>>> 
>>> l = [1, 7, 12, 14, 22, 24, 29, 31, 39, 45, 77, 79, 85, 100]
>>> output = [(l[i], l[j]) for i in range(len(l) - 1) for j in range(i + 1, len(l)) if abs(l[i] - l[j]) == 2]
>>> output
[(12, 14), (22, 24), (29, 31), (77, 79)]
>>> 
>>> s = '\n'.join([str(output[i][0]) + ', ' + str(output[i][1]) for i in range(len(output))])
>>> print(s)
12, 14
22, 24
29, 31
77, 79
>>> 

如果您的示例中的元素在2个一组中,则以下内容。

>>> 
>>> l = [1, 7, 12, 14, 22, 24, 29, 31, 39, 45, 77, 79, 85, 100]
>>> 
>>> n = len(l) - 1
>>> output = [(l[i], l[i + 1]) for i in range(0, n, 2) if abs(l[i] - l[i + 1]) == 2]
>>> output
[(12, 14), (22, 24), (29, 31), (77, 79)]
>>> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM