python - 在包含数字和字符串的列表上使用 max()

标签 python string list int max

我有一个这样的列表:

self.thislist = ['Name', 13, 'Name1', 160, 'Name2', 394]

基本上,列表后面有一个名称和一个数字,我试图找出列表中的最高数字,即 394。但出于某种原因,它选择了一个名称作为 this

      if max(self.thislist) > 150:
            this = max(self.thislist) # so this should be 394
            position = self.thislist.index(this) # The index of it
            temponary = position - 1 # This is so we can find the name that is associated with it
            name = self.thislist[temponary] #and this retrieves the name

它会检索例如 'Name',但它应该是 394。 所以重点是检索一个名称和与该名称关联的数字。有什么想法吗?

最佳答案

通过调用 max,您要求它比较所有值。

在 Python 2.x 中,大多数值都可以相互比较,即使它们属于不同类型;这种比较在某些任意和特定于实现的方式中是有意义的(在 CPython 中,它主要归结为比较类型对象本身的名称),但这对您来说几乎没有用。

在 Python 3.x 中,大多数不相关类型的值无法相互比较,因此您只会得到一个 TypeError 而不是无用的答案。但解决方案是一样的。

如果你想比较数字而忽略名字,你可以过滤掉所有非数字,跳过每个偶数元素,使用一个 key 函数将所有非数字转换为小于任何数字,或几乎任何其他避免尝试比较名称和数字的东西。例如:

if max(self.thislist[1::2]) > 150:

附带说明一下,使用这样的数据结构会使很多事情变得更加复杂。看起来你在这里真正想要的不是交替名称和数字的列表,而是将名称映射到数字的字典,或者名称-数字对的列表,或类似的东西。然后你可以写出更具可读性的东西。例如,在此之后:

self.thisdict = dict(zip(self.thislist[::2], self.thislist[1::2]))

……你可以做这样的事情:

if max(self.thisdict.itervalues()) > 150:

关于python - 在包含数字和字符串的列表上使用 max(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26388657/

相关文章:

python - 从 boost::python::object 列表中获取单个元素,用于 python 例程

SQL内插字符串

Python 字典列表 - 添加具有相同键名的字典

java - 如何从保存 List<> 对象的文件中反序列化?

java - 未指定哪个列表实现

python - 如何跨多个调用将 dask-DAG 持久保存在分布式集群上并保留中间结果?

python - 使用 spark ml(数据框)进行逻辑回归

python - 对列表 pandas 的列表进行过滤

python - 如何传递文件名的路径

string - 如何在 Swift 中更改字符串中单个单词的颜色