我有一些代码可以生成一定范围内的随机数列表(我们会说0-100),但我希望不会出现在范围(45-55)内出现的数字。
出于我的特定目的,我想知道如何在该范围内添加/减去11中的数字。我写了这句话:
desired_list = [integer_list[i] - 11 for i in range(len(integer_list)) if integer_list[i] in list_of_consecutive_unwanted_integers]
但是现在当我打印desired_list时,它显示大括号大约4/5次我检索随机数。不需要解释这个奇怪的现象,但是对我做错了什么以及我需要什么的解释会有所帮助。感谢。
答案 0 :(得分:1)
integer_list[i] in list_of_consecutive_unwanted_integers
检查整数是否不需要,丢弃不在“不需要的列表”中的整数,并保留不需要的整数。
以下是我如何解决这个问题:
>>> # let's get 20 random integers in [0, 100]
>>> random_integers = (randint(0, 100) for _ in xrange(20))
>>> [x - 11 if 45 <= x <= 55 else x for x in random_integers]
[62, 0, 28, 34, 36, 96, 20, 19, 84, 17, 85, 83, 17, 91, 98, 33, 5, 100, 94, 97]
x - 11 if 45 <= x <= 55 else x
是conditional expression,如果整数在[45,55]范围内,则减去11。您也可以将其写为
x - 11 * (45 <= x <= 55)
由于True
和False
的数值为1和0这一事实。
答案 1 :(得分:0)
>>> l # Let l be the list of numbers in the range(0, 100) with some elements
[3, 4, 5, 45, 48, 6, 55, 56, 60]
>>> filter(lambda x: x < 45 or x > 55, l) # Remove elements in the range [45, 55]
[3, 4, 5, 6, 56, 60]
filter
将函数f
应用于输入序列,并返回f(项)返回True
的序列项。
过滤器(...)强>
过滤器(功能或无,序列) - &gt;列表,元组或字符串Return those items of sequence for which function(item) is true. If function is None, return the items that are true. If sequence is a tuple or string, return the same type, else return a list.
答案 2 :(得分:0)
>>> l = range(100) >>> [item for item in l if item <45 or item>55] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]