我有一个数字列表,我需要对其进行排序以了解此列表是否有任何数字介于 2 个值之间(在我的情况下在 1,50 和 2,50 之间(
前任:
list_numbers = ['3,25', '3,15', '1,78', '2,10', '1,06', '1,58', '1,88', '1,19', '4,00', '2,45', '2,25', '3,00', '2,95', '2,45', '2,30', '1,52', '1,96', '6,50', '4,20', '1,27']
我尝试了以下代码,但出现错误:"类型错误:不可排序的类型:str(( <= list((">
if '1,50' <= list_numbers <= '2,50':
print('number between the range!')
编辑:2个值之间的正确数字需要存储在变量"找到"下,以便以后访问
您可以使用过滤器来获取列表,但首先您应该将其值更改为浮点数,此外不要使用列表作为变量名称。 List 是您需要的内置操作,不应被覆盖可能会导致一些不良副作用:
list_ = ['3,25', '3,15', '1,78', '2,10', '1,06', '1,58', '1,88', '1,19', '4,00', '2,45', '2,25', '3,00', '2,95', '2,45', '2,30', '1,52', '1,96', '6,50', '4,20', '1,27']
list_number = [float(number.replace(",",".")) for number in list_]
found = filter(lambda x: 1.50 <= x <= 2.50, list_number)
for value in found:
print(value)
但是,当然,如果您不想将其转换为浮动,您也可以毫无问题地执行以下操作:
found = filter(lambda x: "1,50" <= x <= "2,50", list_)
输出将是相同的。(除了在一个中它有","并且以零结尾,另一个结果使用"."而不以零结尾(
输出:
1.78
2.1
1.58
1.88
2.45
2.25
2.45
2.3
1.52
1.96
for elem in list:
if '1,50' <= elem <= '2,50':
print(True)
break
首先,列表中的所有字符串都是错误的格式。Python 在尝试将字符串解析为数字时将引发异常:
(值错误:无法将字符串转换为浮点数:"3,25"(
这是因为字符串中有一个逗号(","( 而不是一个 peroid("."(。您需要将所有逗号替换为 peroid,然后再将它们转换为特定数据类型。下面的示例...
# Bad name, use something else as "list" is a built-in type
list = ['3,25', '3,15', '1,78', '2,10', '1,06', '1,58', '1,88', '1,19', '4,00', '2,45', '2,25', '3,00', '2,95', '2,45', '2,30', '1,52', '1,96', '6,50', '4,20', '1,27']
# The numbers to extract from the list of strings
numbers = []
# For each number (as string), reformat the string and then cast it to a floating number
for number_str in list:
number = float(number_str.replace(',', '.'))
numbers.append(number)
然后,您可以检查是否有最小值和最大值的数字:
for n in numbers:
if 1.50 <= n <= 2.50:
print("{} is between 1.50 and 2.50".format(n))
break
编辑:
正如@kopecs所说,float实际上是局部依赖的,这意味着分隔符可以更改为您想要的任何符号。看: locale — 国际化服务
根据你到底想做什么,你可以使用 for 循环
for value in list:
if '1,50' <= value <= '2,50':
print('number between the range!')
break
我添加了一个中断,因为我不确定您是只想打印一次还是每个这样的数字。我还建议你存储数字,数字,或者至少在进行比较时投射它们,这样你就不会依赖词典值。例如:
for value in list:
if 1,50 <= float(value) <= 2,50:
print('number between the range!')
break
根据您可能想要做的编辑(如果您使用的是"原始"循环(
found = []
for value in list:
if 1,50 <= float(value) <= 2,50:
found += value
首先:请不要将 list 用作变量,因为它是 python 提供的内置类型。通过使用列表作为变量,您将覆盖它对内置类型列表的引用
第二:建议将数字字符串转换为浮点数或整数以进行算术运算或表达式
values = ['3,25', '3,15', '1,78', '2,10', '1,06', '1,58', '1,88', '1,19', '4,00', '2,45', '2,25', '3,00', '2,95', '2,45', '2,30', '1,52', '1,96', '6,50', '4,20', '1,27']
found = [i for i in map(lambda n: float(n.replace(',', '.')), values) if 1.50 < i < 2.50]
for i in found:
print(i)
输出:
1.78
2.1
1.58
1.88
2.45
2.25
2.45
2.3
1.52
1.96