python 3.x附加一个列表并从旧列表中删除项目

时间:2016-04-10 09:51:35

标签: python python-3.x

我想知道是否有一种方法可以通过使用列表推导来缩短此代码。我试图在每次循环运行时使用它们循环中的最后一个ltems是我得到的。这就是我的尝试。

list2 = [i for i in list1 if i[0] == counter]

以下是我想要改进的代码。

list1 = [(1,4),(2,5),(3,6),(4,6),(5,6),(6,7),(7,5),(8,6),(9,4)]
list2 = []
counter = 0

while counter != 10:
    for i in list1:
        if i[0] == counter:
            list2.append(i)

    for j in list2:
        if j in list1:
            list1.remove(j)

    counter += 1

感谢您的帮助

编辑。我应该在这里给出更多代码。当计数器== i [1]时,将有另一个列表由list2填充。我已使用此列表推导来替换用于从list1

中删除项目的for循环
list1[:] = [i for i in list1 if i not in list2]

我想知道的是有没有办法使用列表理解(或者我以前没见过的东西)可以得到用于将列表追加到一行的for循环?

list1 = [(1,4),(2,5),(3,6),(4,6),(5,6),(6,7),(7,5),(8,6),(9,4)]
list2 = []
list3 = []

counter = 0

while counter != 10:
    for i in list1:
        if i[0] == counter:
            list2.append(i)

    for j in list2:
        if j in list1:
            list1.remove(j)

    for x in list2:
        if x[1] == counter:
            list3.append(i)

    for y in list3:
        if y in list2:
            list1.remove(y)



    counter += 1

4 个答案:

答案 0 :(得分:0)

据我所知,只是将列表1的元素复制到列表2中。然后尝试删除列表1的所有元素(如果它们在列表2中)。从技术上讲,这可以通过以下方式完成

list1 = [(1,4),(2,5),(3,6),(4,6),(5,6),(6,7),(7,5),(8,6),(9,4)]
list2 = list1
list1 = []

但是本着你的问题的精神。您在列表推导中使用的if语句很好,但计数器的值永远不会递增,因此您始终在测试i[0] == 0是否为真。

如果您只是想了解列表推导的行为方式,那么您可能要完成的任务可以通过以下方式完成

list1 = [(1,4),(2,5),(3,6),(4,6),(5,6),(6,7),(7,5),(8,6),(9,4)]
list2 = [list1[i] for i in range(len(list1))]
list1 = [val for val in list2 if val not in list1]

第一个列表理解类似于使用计数器。第二个是每个具有条件的循环,并且比第一个循环更加pythonic。不完全确定您对此代码的意图是什么,但希望这会有所帮助。

答案 1 :(得分:0)

试试这个:

list1 = [(1,4),(2,5),(3,6),(4,6),(5,6),(6,7),(7,5),(8,6),(9,4)]
list2 = []
counter = 0

for counter, (x, y) in list(enumerate(list1)):
    list2.append((x, y))
    list1.remove((x, y))

答案 2 :(得分:0)

好吧,如果你在列表理解中使用+ =而不是=,我找到了一个答案,而列表是追加而不是替换。仅在您运行理解之前声明列表时才会起作用。谢谢大家的答案。

list1 = [(1,4),(2,5),(3,6),(4,6),(5,6),(6,7),(7,5),(8,6),(9,4)]
list2 = []
list3 = []

counter = 0

while counter != 10:
    list2 += [n for n in list1 if n[0] == counter]

    list1 = [i for i in list1 if i not in list2]

    list3 += [j for j in list2 if j[1] == counter]

    list2 = [n for n in list2 if n not in list2] 

counter += 1

答案 3 :(得分:0)

我能找到的最有效的方法是

list1.sort(lambda t: t[0], reverse=True)
list2 = []

for i in range(10):
    while list1[-1][0] == i:
        # grab all the items from list1 where x == i (in tuples (x, y) )
        list2.append(list1.pop())

在这种情况下,列表理解确实不是首选。