我想知道是否有一种方法可以通过使用列表推导来缩短此代码。我试图在每次循环运行时使用它们循环中的最后一个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
答案 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())
在这种情况下,列表理解确实不是首选。