列表中的特定范围 (python)
Specific range within a list (python)
我有一个从文本字符串中提取的整数列表,所以当我打印列表(我称之为 test
)时,我得到:
['135', '2256', '1984', '3985', '1991', '1023', '1999']
并且我想打印或制作一个仅包含特定范围内数字的新列表,例如在 1000-2000 之间。我尝试了以下方法,但它仍然 returns 我原始列表中的所有项目。
for i in test:
if i>1000:
print i
elif i<2000:
print i
而且我不明白为什么它仍然打印低于 1000 或高于 2000 的数字。
那是因为您正在比较 string
和 integer
,如果数字不超过 1000
,例如第一个值:135
,如果移动到 elif
其中 135
< 2000
.
您可以尝试的是:
for i in test:
if 1000 < int(i) < 2000:
print i
假设您的所有值都是整数值。
首先将您的字符串列表转换为整数列表:
ints_list = [int(x) for x in test]
然后您可以根据需要过滤此列表。我们可以用像上面一行那样的列表理解来做到这一点。请注意 and
使得该数字必须满足两个条件才能出现在列表中。
filtered_list = [x for x in ints_list if x > 1000 and x < 2000]
检查这个:
>>> l = ['135', '2256', '1984', '3985', '1991', '1023', '1999']
>>> for i in l:
if (int(i) > 1000) and (int(i) < 2000):
print i
- 首先将 str 转换为 int,然后比较您的条件
让我们首先说明 不能 运行 under python 3 因为你不能再将字符串(包含在你的列表中)与整数进行比较没有错误。
在 python 2,所有 i>1000
测试成功。
>>> "12">1000
True
幸运的是,这已在 python 3 中修复,它避免了这些错误:
>>> "12">1000
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
TypeError: unorderable types: str() > int()
我建议测试整数(如果你想将列表元素保留为字符串,否则事先转换):
lst = ['135', '2256', '1984', '3985', '1991', '1023', '1999']
print([x for x in lst if 1000<int(x)<2000])
或先转为整数,再过滤:
lst = [int(x) for x in lst]
print([x for x in lst if 1000<x<2000])
使用链式比较,在这种情况下非常可读。
使用 Python 2 还是 3 是不明确的。您标记了 Python 3,但在这种情况下,您应该得到 TypeError
而不是语义上不正确的输出。此答案适用于 Python.
的两个版本
test
是一个字符串列表,但是你想做整数比较。
首先构建一个整数列表,然后应用您的算法。
>>> test = ['135', '2256', '1984', '3985', '1991', '1023', '1999']
>>> test_ints = [int(x) for x in test] # or test_ints = map(int, test)
>>> for i in test_ints:
... if i > 1000:
... print(i)
... elif i < 2000:
... print(i)
...
135
2256
1984
3985
1991
1023
1999
现在代码可以运行了,但是仍然有错误。注意 135
是如何错误打印的,因为它不大于 1000
但小于 2000
.
无错误版本可能如下所示:
>>> for i in test_ints:
... if 1000 < i < 2000:
... print(i)
...
1984
1991
1023
1999
... 如果您想构建一个列表而不只是打印过滤后的元素,请创建一个空列表和 append
匹配项。
>>> result = []
>>> for i in test_ints:
... if 1000 < i < 2000:
... result.append(i)
...
>>> result
[1984, 1991, 1023, 1999]
如果您已经对列表理解感到满意,那么编写此代码的较短版本如下所示:
>>> result = [i for i in test_ints if 1000 < i < 2000]
>>> result
[1984, 1991, 1023, 1999]
或者,到 int
的转换可以通过将内置的 int
映射到您的原始列表 test
在一个单一的推导中即时完成。
>>> result = [i for i in map(int, test) if 1000 < i < 2000]
>>> result
[1984, 1991, 1023, 1999]
就个人而言,我更喜欢最后一种解决方案,因为它简洁。
您目前面临两个问题:您的号码并不是真正的 integers
,而是 strings
,并且 if
条件未按您预期的那样工作。
从 integer
问题开始,您可以看到您正在处理 strings
,它通过在 for
循环开始时打印其类型来表示一个数字:
for i in test:
print type(i) # string!
in python 很容易将 strings
转换为 integers
:
i = int(i) # now 'i' is an integer
在这段代码中,python 将尝试将字符串转换为整数,如果不能(即 int("Hello World!")
),则会引发错误。
第二个问题是你的 if
条件背后的逻辑,但幸运的是 Python 真的很像英语,所以我们可以很容易地将我们的代码翻译成口语:
for each number in my list,
if the number is higher than 1000, print the number
else if the number is lower than 2000, print the number
所以现在我们可以模拟一些情况:
our number is 1337
is the number higher than 1000? YES! so - print the number
或
our number is 42
is the number higher than 1000? NO! go on
is the number lower than 2000? YES! print the number
最后:
our number is 2048
is the number higher than 1000? YES! print the number
所以现在问题似乎很清楚了。
您要转换为代码的 english sentence
是:
for each number in my list,
if the number is higher than 1000 and the number is lower than 2000, print the number
我不会给你写代码,但你可以在其他答案中找到它
我有一个从文本字符串中提取的整数列表,所以当我打印列表(我称之为 test
)时,我得到:
['135', '2256', '1984', '3985', '1991', '1023', '1999']
并且我想打印或制作一个仅包含特定范围内数字的新列表,例如在 1000-2000 之间。我尝试了以下方法,但它仍然 returns 我原始列表中的所有项目。
for i in test:
if i>1000:
print i
elif i<2000:
print i
而且我不明白为什么它仍然打印低于 1000 或高于 2000 的数字。
那是因为您正在比较 string
和 integer
,如果数字不超过 1000
,例如第一个值:135
,如果移动到 elif
其中 135
< 2000
.
您可以尝试的是:
for i in test:
if 1000 < int(i) < 2000:
print i
假设您的所有值都是整数值。
首先将您的字符串列表转换为整数列表:
ints_list = [int(x) for x in test]
然后您可以根据需要过滤此列表。我们可以用像上面一行那样的列表理解来做到这一点。请注意 and
使得该数字必须满足两个条件才能出现在列表中。
filtered_list = [x for x in ints_list if x > 1000 and x < 2000]
检查这个:
>>> l = ['135', '2256', '1984', '3985', '1991', '1023', '1999']
>>> for i in l:
if (int(i) > 1000) and (int(i) < 2000):
print i
- 首先将 str 转换为 int,然后比较您的条件
让我们首先说明 不能 运行 under python 3 因为你不能再将字符串(包含在你的列表中)与整数进行比较没有错误。
在 python 2,所有 i>1000
测试成功。
>>> "12">1000
True
幸运的是,这已在 python 3 中修复,它避免了这些错误:
>>> "12">1000
Traceback (most recent call last):
File "<string>", line 301, in runcode
File "<interactive input>", line 1, in <module>
TypeError: unorderable types: str() > int()
我建议测试整数(如果你想将列表元素保留为字符串,否则事先转换):
lst = ['135', '2256', '1984', '3985', '1991', '1023', '1999']
print([x for x in lst if 1000<int(x)<2000])
或先转为整数,再过滤:
lst = [int(x) for x in lst]
print([x for x in lst if 1000<x<2000])
使用链式比较,在这种情况下非常可读。
使用 Python 2 还是 3 是不明确的。您标记了 Python 3,但在这种情况下,您应该得到 TypeError
而不是语义上不正确的输出。此答案适用于 Python.
test
是一个字符串列表,但是你想做整数比较。
首先构建一个整数列表,然后应用您的算法。
>>> test = ['135', '2256', '1984', '3985', '1991', '1023', '1999']
>>> test_ints = [int(x) for x in test] # or test_ints = map(int, test)
>>> for i in test_ints:
... if i > 1000:
... print(i)
... elif i < 2000:
... print(i)
...
135
2256
1984
3985
1991
1023
1999
现在代码可以运行了,但是仍然有错误。注意 135
是如何错误打印的,因为它不大于 1000
但小于 2000
.
无错误版本可能如下所示:
>>> for i in test_ints:
... if 1000 < i < 2000:
... print(i)
...
1984
1991
1023
1999
... 如果您想构建一个列表而不只是打印过滤后的元素,请创建一个空列表和 append
匹配项。
>>> result = []
>>> for i in test_ints:
... if 1000 < i < 2000:
... result.append(i)
...
>>> result
[1984, 1991, 1023, 1999]
如果您已经对列表理解感到满意,那么编写此代码的较短版本如下所示:
>>> result = [i for i in test_ints if 1000 < i < 2000]
>>> result
[1984, 1991, 1023, 1999]
或者,到 int
的转换可以通过将内置的 int
映射到您的原始列表 test
在一个单一的推导中即时完成。
>>> result = [i for i in map(int, test) if 1000 < i < 2000]
>>> result
[1984, 1991, 1023, 1999]
就个人而言,我更喜欢最后一种解决方案,因为它简洁。
您目前面临两个问题:您的号码并不是真正的 integers
,而是 strings
,并且 if
条件未按您预期的那样工作。
从 integer
问题开始,您可以看到您正在处理 strings
,它通过在 for
循环开始时打印其类型来表示一个数字:
for i in test:
print type(i) # string!
in python 很容易将 strings
转换为 integers
:
i = int(i) # now 'i' is an integer
在这段代码中,python 将尝试将字符串转换为整数,如果不能(即 int("Hello World!")
),则会引发错误。
第二个问题是你的 if
条件背后的逻辑,但幸运的是 Python 真的很像英语,所以我们可以很容易地将我们的代码翻译成口语:
for each number in my list,
if the number is higher than 1000, print the number
else if the number is lower than 2000, print the number
所以现在我们可以模拟一些情况:
our number is 1337
is the number higher than 1000? YES! so - print the number
或
our number is 42
is the number higher than 1000? NO! go on
is the number lower than 2000? YES! print the number
最后:
our number is 2048
is the number higher than 1000? YES! print the number
所以现在问题似乎很清楚了。
您要转换为代码的 english sentence
是:
for each number in my list, if the number is higher than 1000 and the number is lower than 2000, print the number
我不会给你写代码,但你可以在其他答案中找到它