Python:在列表中组合数字

Rul*_*rld -1 python processing-efficiency python-3.x

我有一个清单,说

x = [0,1,2,3,"a","b","cd"]
Run Code Online (Sandbox Code Playgroud)

我想保留最小的数字和所有字母,因此在示例中它将变为

x = [0,"a","b","cd"]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?理想情况下,代码将非常高效,因为我正在为数百万个列表执行此操作。

尝试:我尝试找到min(x),但是由于列表中有字符串,因此会导致错误

Kar*_*ngh 6

我认为以下代码最有效。它不需要额外的内存,复杂度为O(N)

import sys
x = [0, 1, 2, 3, "a", "b", "cd"]
minimum = sys.maxsize # for python 3.x
# minimum = sys.maxint #for python 2
j = 0
for i in range(len(x)):
    if isinstance(x[i], str):
        x[j] = x[i]
        j+=1
    else:
        minimum = min(minimum, x[i])
print([minimum]+x[:j])
Run Code Online (Sandbox Code Playgroud)

输出量

[0, 'a', 'b', 'cd']
Run Code Online (Sandbox Code Playgroud)


Mil*_*deh 5

尝试这个:

Python 2.7

output = [s for s in x if isinstance(s, str)]
output.append(min(x))

#>>> output
#['a', 'b', 'cd', 0]

Run Code Online (Sandbox Code Playgroud)

Python3:

output = [s for s in x if isinstance(s, str)]
output.append(min([i for i in x if isinstance(i, int)]))
Run Code Online (Sandbox Code Playgroud)