从另一个列表中减去一个不可用的列表

时间:2018-03-19 18:29:16

标签: python list

我已经尝试过一段时间了,而且我已经尝试过我在论坛上发现的东西,但它仍然无法正常工作,我觉得它是一样的真的很明显错误。这是我的代码:

allnum=[]
num=[]
for i in range(100):
    allnum.append(random.randint(1,99))

num.append(allnum[:10])
print (allnum)
print(num)

allnum= [i for i in allnum if i not in num]
print (allnum)

结果只是: [55, 94, 88, 66, 34, 99, 76, 41, 48, 55, 84, 16, 57, 58, 46, 26, 10, 25, 10, 94, 93, 3, 29, 74, 6, 47, 45, 67, 1, 9, 10, 10, 3, 34, 13, 91, 81, 70, 87, 46, 26, 52, 28, 66, 88, 9, 30, 43, 85, 32, 38, 5, 60, 65, 27, 52, 68, 94, 94, 14, 46, 5, 8, 9, 32, 62, 6, 18, 84, 86, 2, 12, 97, 99, 84, 13, 64, 39, 84, 75, 23, 88, 21, 60, 37, 33, 75, 53, 88, 54, 28, 5, 29, 97, 38, 21, 27, 25, 17, 31]

[[55, 94, 88, 66, 34, 99, 76, 41, 48, 55]]

[55, 94, 88, 66, 34, 99, 76, 41, 48, 55, 84, 16, 57, 58, 46, 26, 10, 25, 10, 94, 93, 3, 29, 74, 6, 47, 45, 67, 1, 9, 10, 10, 3, 34, 13, 91, 81, 70, 87, 46, 26, 52, 28, 66, 88, 9, 30, 43, 85, 32, 38, 5, 60, 65, 27, 52, 68, 94, 94, 14, 46, 5, 8, 9, 32, 62, 6, 18, 84, 86, 2, 12, 97, 99, 84, 13, 64, 39, 84, 75, 23, 88, 21, 60, 37, 33, 75, 53, 88, 54, 28, 5, 29, 97, 38, 21, 27, 25, 17, 31]

抱歉,如果这是一个非常愚蠢的错误:)

3 个答案:

答案 0 :(得分:1)

您也可以在此处使用设置操作来识别两个列表之间的区别

library(ggplot2)
mtcars$qsec <- mtcars$qsec-21
sp2<-ggplot(mtcars, aes(x=wt, y=mpg, color=qsec)) + geom_point()
midpoint <- 0
sp2+scale_color_gradientn( colours = c("red","white","blue"),
                           values=c(1.0, (midpoint-min(mtcars$qsec))/(max(mtcars$qsec)-min(mtcars$qsec)),0))

作为一个额外的奖励,设置操作非常快。但是,你的allnum列表中只会得到唯一的元素,所以如果多次生成一个随机数,它只会在输出中出现一次。

根据评论+1,您可以使用两行中的numpy完成所有这些操作:

import numpy as np
allnum = []
for i in range(100):
    allnum.append(np.random.randint(1,99))

# slice allnum to the desired level
num = allnum[:10]

# this is a good opportunity to use set operations and identify all elements in allnum that 
# are not in num
diff = list(set(allnum).difference(set(num)))

答案 1 :(得分:1)

您使用了num.append,它将一个对象作为参数并将其附加到列表中。因此,您附加了一个元素,这是一个包含十个整数的列表(请注意打印num时的两个左右方括号。

你想使用extend,它以iterable作为参数,并将其每个元素添加到列表中:

num.extend(allnum[:10])

或者更简单地说,num之前是空的:

num = allnum[:10]

另请注意,测试每个元素是否在num列表中是非常慢的。测试一个元素是否属于set

要快得多

所以,你可以使用:

import random

allnum=[]
num=[]
for i in range(100):
    allnum.append(random.randint(1,99))

num = set(allnum[:10])
print (allnum)
print(num)

allnum = [i for i in allnum if i not in num]
print(allnum)

答案 2 :(得分:-1)

试过这个并且它有效。

first_list = list(range(5,15))
second_list = list(range(10,20))

first_minus_second = [x for x in first_list if x not in second_list]
相关问题