猿问

带有字符串和整数的列表上的最大/最小函数

我有一个包含字符串和整数的列表,想找到整数的最小值,而不需要列表切片。有解决办法吗?


arr = [5,3,6,"-",3,"-",4,"-"]    

for i in range(len(set(arr))):

        cut = min(arr)


饮歌长啸
浏览 195回答 3
3回答

三国纷争

您可以使用生成器表达式过滤非数字:arr = [5,3,6,"-",3,"-",4,"-"]result = min(e for e in arr if isinstance(e, int))print(result)输出3

不负相思意

这是一种直接使用自定义函数max和min内置函数的方法key:arr = [5,3,6,"-",3,"-",4,"-"]max(arr, key=lambda x: (isinstance(x,int), x))# 6并且对于min:min(arr, key=lambda x: (not isinstance(x,int), x))# 3细节对于 min,将以下列表推导式视为与 应用的转换的“等效” key:sorted([(not isinstance(x,int), x) for x in arr])[(False, 3), (False, 3), (False, 4), (False, 5), (False, 6), (True, '-'), (True, '-'), (True, '-')]所以min将是最低的元组,即(0,3)。对于max,最高将是(1,6):sorted([(isinstance(x,int), x) for x in arr])[(False, '-'), (False, '-'), (False, '-'), (True, 3), (True, 3), (True, 4), (True, 5), (True, 6)]

jeck猫

您可以转换list为set加速计算:min(i for i in set(arr) if isinstance(i, int))基准:setup = "arr = [5, 3, 6,'-', 3,'-', 4, '-'] * 1000"solution1 = "min(i for i in set(arr) if isinstance(i, int))"solution3 = "min(e for e in arr if isinstance(e, int))"solution2 = "min(arr, key=lambda x: (not isinstance(x,int), x))"print(timeit.timeit(setup=setup, stmt=solution1, number=10000))print(timeit.timeit(setup=setup, stmt=solution2, number=10000))print(timeit.timeit(setup=setup, stmt=solution3, number=10000))输出:1.089561502913.38963347322.653398585如果您只有一种类型的字符串:min(set(arr) - {'-'})
随时随地看视频慕课网APP

相关分类

Python
我要回答