聊聊Python String型列表求最值的问题

最近在写一个项目的时候发现了个很神奇的问题

temp_list=['9','10','10','9','10']
print(max(temp_list)) # 9
print(min(temp_list)) # 10

最大值变成了9,而最小值变成了10。导致我在一个Excel表中的数据老是判断错误

分析之后原因如下:

如果比较字符串的大小,则比较的是字符的ASCII编码的大小。

在比较时,设置一个计数器,从零开始,一直循环到最短的那个字符结束,一位一位进行比较,

1.如果 字符串1的第n位的ASCII码值 等于 字符串2的第n位的ASCII码值
则 继续比较下一位
2.如果 字符串1的第n位的ASCII码值 大于 字符串2的第n位的ASCII码值
则 输出结果:1,表示字符串1 > 字符串2;
3.如果 字符串1的第n位的ASCII码值 小于 字符串2的第n位的ASCII码值
则 输出结果:-1 表示字符串1 < 字符串2;
4.如果 每一位的ASCII码值都相等,而且长度相同,
则 输出结果:0 表示字符串1 == 字符串2;
5.如果 字符串1是字符串2的前m位,例如 abcd 与abcdef 比较,
则 字符串1<字符串2.
原因是,到第5位时,字符串1的ASCII值是0,而字符串2的ASCII值为'e',即十进制的101,当然是字符串2大了.

这边的话,相当于是9跟1作比较,固然最后得出来的字符串‘9’大于‘10’

比较好的办法就是写个函数,把字符串转换成int型

def stringToInt(temp_list):
    tt_list=[]
    for i in temp_list:
        tt_list.append(float(i))
    return tt_list

字符串的问题虽然简单,但是很容易出错,另外,Python中做判断的时候一定要注意数据类型

到此这篇关于Python String型列表求最值的问题的文章就介绍到这了,更多相关Python String型列表内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python列表(list)、字典(dict)、字符串(string)基本操作小结

    创建列表 复制代码 代码如下: sample_list = ['a',1,('a','b')] Python 列表操作 复制代码 代码如下: sample_list = ['a','b',0,1,3] 得到列表中的某一个值 复制代码 代码如下: value_start = sample_list[0] end_value = sample_list[-1] 删除列表的第一个值 复制代码 代码如下: del sample_list[0] 在列表中插入一个值 复制代码 代码如下: sample_li

  • 聊聊Python String型列表求最值的问题

    最近在写一个项目的时候发现了个很神奇的问题 temp_list=['9','10','10','9','10'] print(max(temp_list)) # 9 print(min(temp_list)) # 10 最大值变成了9,而最小值变成了10.导致我在一个Excel表中的数据老是判断错误 分析之后原因如下: 如果比较字符串的大小,则比较的是字符的ASCII编码的大小. 在比较时,设置一个计数器,从零开始,一直循环到最短的那个字符结束,一位一位进行比较, 1.如果 字符串1的第n位的A

  • python实现将列表中各个值快速赋值给多个变量

    我就废话不多说啦,还是直接看代码吧! list1 = [1,2,3,4] a,b,c,d = list1 则 a = 1 b =2 等 这种方式只有当左边的操作数个数和list1长度相同时,才可以这么做,不然报错. 我们假设我们有一个list对象List,它的长度足够长,想把它从下标i开始的k个元素赋给k个元素,可以这么做: v1, v2, v3, -, vk = List[i : i + k] #默认i=0, k=len(List) 补充知识:python 将某个字段存储为列表类型 实现存储数

  • 聊聊python 逻辑运算及奇怪的返回值(not,and,or)问题

    首先,‘and’.‘or’和‘not’的优先级是not>and>or. 同一优先级从左往右计算. 先说非运算,Python的非运算与这些语言相比,并没有特别的地方.not只有两个返回值,True和False.在Python中,真值为假的对象,包括False,None,数字0,空字符串以及空的容器类型.除此以外的任何对象均为真. 接下来是与运算,Python的与(and)运算的规则是 若左边的表达式为真,则返回右边表达式的值 否则,返回左边表达式的值 最后再来说或运算,Python的或(or)运

  • Python对list列表结构中的值进行去重的方法总结

    今天遇到一个问题,在同事随意的提示下,用了 itertools.groupby 这个函数.不过这个东西最终还是没用上. 问题就是对一个list中的新闻id进行去重,去重之后要保证顺序不变. 直观方法 最简单的思路就是: ids = [1,2,3,3,4,2,3,4,5,6,1] news_ids = [] for id in ids: if id not in news_ids: news_ids.append(id) print news_ids 这样也可行,但是看起来不够爽. 用set 另外

  • python求crc32值的方法

    本文实例讲述了python求crc32值的方法.分享给大家供大家参考.具体实现方法如下: 要想求CRC值,前面要import binascii binascii.crc32(v)  求出了v的crc32值,这是一个long型,形如-1456387L,把这个值&0xffffffff得到的值形如48a213L的形式. 然后把这个值用16进制表示出来. 具体代码如下: def _crc32(self, v): """ Generates the crc32 hash of

  • Python 实现过滤掉列表中唯一值

    目录 1.filter_unique 2.collections.Counter 3.列表推导式 4.filter_non_unique 1.filter_unique from collections import Counter def filter_unique(lst): return [item for item, count in Counter(lst).items() if count > 1] # EXAMPLES filter_unique([1, 2, 2, 3, 4, 4

  • Python代码列表求并集,交集,差集

    目录 一.列表求并集 1. union_by 二.列表求交集 1. intersection_by 三.列表求差集 1. difference 2. difference_by 3. symmetric_difference_by 一.列表求并集 实现了两个列表求并集的功能.同时支持使用一个过滤条件函数,列表中所有元素根据该条件求取并集,并集中是两个列表的原始元素. 本篇阅读的代码片段来自于30-seconds-of-python. 1. union_by def union_by(a, b,

  • python开发任意表达式求值全功能示例

    目录 正文 完整的源代码 正文 在之前的基础上进一步实现了全功能表达式求值. 已支持浮点数 已支持字符串的处理,前加一个"(类似lisp语法) 支持减号/负号,一符两用机制 支持所有算术运算符,包括**,//, % 支持全部7个比较运算符 支持与或非3个逻辑运算符 支持自定义数学函数(代码中预设sin函数作为示范) 支持外部提供的变量机制 支持外部设置函数(代码中预设isvar函数作为示范) 支持列表 字典的支持,体现在外部的变量中 结构清晰,易于扩展 具有实用性及学习性 与其说距离DSL只有一

  • python创建列表并给列表赋初始值的方法

    本文实例讲述了python创建列表并给列表赋初始值的方法.分享给大家供大家参考.具体如下: aList = [123, 'abc', 4.56, ['inner', 'list'], 7-9j] anotherList = [None, 'something to see here'] print aList print anotherList aListThatStartedEmpty = [] print aListThatStartedEmpty print list('foo') 运行结

  • python 列表输出重复值以及对应的角标方法

    如下所示: a = [99,1,2,1,3,4] # 集合存储重复数据 b=set() for i in a: if a.count(i)>1: b.update([i]) dict ={} # 遍历重复数据 for j in b: list = [] for A in range(len(a)): if j == a[A]: list.append(A) dict[j] = list print(dict) 以上这篇python 列表输出重复值以及对应的角标方法就是小编分享给大家的全部内容了,

随机推荐