Python对多个列表进行排序,然后首先打印出相同的元素

时间:2017-08-27 11:25:38

标签: python python-3.x

我有三个包含不同元素的列表,但是其中一些是相同的元素。那些相同的元素应该是相同的顺序。这是我的代码:


    import itertools
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    b = [0, 2, 4, 6, 8, 10, 12, 14]
    c = [0, 4, 8, 12, 16]

    for x, y, z in itertools.zip_longest(a, b, c):
        print(x, y, z)

当我运行它时,打印出来如下:


    0 0 0
    1 2 4
    2 4 8
    3 6 12
    4 8 16
    5 10 None
    6 12 None
    7 14 None
    8 None None
    9 None None

但我更喜欢他们变成这样:


    0 0 0
    4 4 4
    8 8 8
    None 12 12
    2 2 None
    6 6 None
    1 10 16
    3 14 None
    5 None None
    7 None None
    9 None None


编辑:那些相同的元素应该在顶部,其中3个在一起。如果3个中有2个相同的元素,我希望它们像:

   
    None 12 12

正如我在上面的例子中指出的那样。如果某些特定线上的元素不同,则无关紧要,请保持原样(参见示例:1 10 16)。 总结一下;我首先需要在特定的行上使用相同的3个元素。另一个很小的理想例子:


    a = [2, 1, 3, 5]
    b = [1, 2]
    c = [2, 3, 4]

我们的小例子应该成为这个:


    2 2 2
    3 None 3
    1 1 None
    5 None 4

1 个答案:

答案 0 :(得分:0)

a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [0, 2, 4, 6, 8, 10, 12, 14]
c = [0, 4, 8, 12, 16]

max_len = max(len(a),len(b),len(c))
print max_len

while not len(a)==int(max_len):
    a.append(0)


while not len(b)==int(max_len):
    b.append(0)

while not len(c)==int(max_len):
    c.append(0)

print a
print b
print c


d = [max(item) for item in zip(a,b,c)]

m = []
for item in d:
    if item in a:
        val1 = item
        a.remove(item)
    else: 
        val1 = None
    if item in b:
        val2 = item
        b.remove(item)
    else:
        val2 = None
    if item in c:
        val3 = item
        c.remove(item)
    else:
        val3 = None

    m.append((val1,val2,val3))

print m 

<强>输出:

10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 2, 4, 6, 8, 10, 12, 14, 0, 0]
[0, 4, 8, 12, 16, 0, 0, 0, 0, 0]
[(0, 0, 0), (4, 4, 4), (8, 8, 8), (None, 12, 12), (None, None, 16), (None, 10, None), (None, None, None), (None, 14, None), (None, None, None), (9, None, None)]