1

我有一些代码可以生成一定范围内的随机数列表(我们会说 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 次我检索随机数。无需解释这种奇怪的现象,但解释我做错了什么以及我需要什么会有所帮助。谢谢。

4

3 回答 3

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是一个条件表达式,如果整数在 [45, 55] 范围内,则减去 11。你也可以这样写

x - 11 * (45 <= x <= 55)

由于TrueFalse具有数值 1 和 0。

于 2013-01-30T21:50:31.947 回答
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]

于 2013-01-30T22:36:48.357 回答
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(item) 返回的序列中的项目True

filter(...)
filter(function or None, sequence) -> list, tuple, or string

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.
于 2013-01-30T22:27:46.723 回答