如何在Python中连接混合列表(数组)(其中包含整数)



我有一个混合的列表(数组)

a = ["x", "2", "y"]
b = ["x", 2, "y"]
print ":".join(a)
print ":".join(b)

第一个联接有效,但第二个联接抛出TypeError异常

我想到了这个,但这是Python解决方案吗?

print ":".join(map(str, b))

顺便说一句,最后我只想把这个字符串写到一个文件中,所以如果有具体的解决方案,我也会很感激。

您的解决方案运行良好,可能是中小型列表中最快的方法之一,但它会创建一个不必要的列表(在python2.x中)。通常这不是问题,但在少数情况下,根据对象b的不同,这可能是一个问题。另一个在python2和python3中都很懒惰的是:

':'.join(str(x) for x in b)

python 2.7.3:的一些时间

$ python -m timeit -s 'b = ["x", 2, "y"]' '":".join(map(str,b))'
1000000 loops, best of 3: 1.66 usec per loop
$python -m timeit -s 'b = ["x", 2, "y"]' '":".join([str(x) for x in b])'
1000000 loops, best of 3: 1.49 usec per loop
$ python -m timeit -s 'b = ["x", 2, "y"]' '":".join(str(x) for x in b)'
100000 loops, best of 3: 3.26 usec per loop
$python -m timeit -s 'from itertools import imap; b = ["x", 2, "y"]' '":".join(imap(str,b))'
100000 loops, best of 3: 2.83 usec per loop

蟒蛇的一些时间3.2:

$ python3 -m timeit -s 'b = ["x", 2, "y"]' '":".join(map(str,b))'
100000 loops, best of 3: 2.6 usec per loop
$ python3 -m timeit -s 'b = ["x", 2, "y"]' '":".join([str(x) for x in b])'
100000 loops, best of 3: 2.08 usec per loop
$ python3 -m timeit -s 'b = ["x", 2, "y"]' '":".join(str(x) for x in b)'
100000 loops, best of 3: 3.39 usec per loop

注意,如果你让循环变得更大,差异就会变得不那么重要:

蟒蛇2.7.3:

$ python -m timeit -s 'b = list(range(10000))' '":".join(str(x) for x in b)'
100 loops, best of 3: 4.83 msec per loop
$ python -m timeit -s 'b = list(range(10000))' '":".join([str(x) for x in b])'
100 loops, best of 3: 4.33 msec per loop
$ python -m timeit -s 'b = list(range(10000))' '":".join(map(str,b))'
100 loops, best of 3: 3.29 msec per loop

python 3.2.0

$ python3 -m timeit -s 'b = list(range(10000))' '":".join(str(x) for x in b)'
100 loops, best of 3: 6.42 msec per loop
$ python3 -m timeit -s 'b = list(range(10000))' '":".join([str(x) for x in b])'
100 loops, best of 3: 5.51 msec per loop
$ python3 -m timeit -s 'b = list(range(10000))' '":".join(map(str,b))'
100 loops, best of 3: 4.55 msec per loop

*在我的MacbookPro、OS-X 10.5.8 intel core2duo上完成的所有计时。。。。

票据,

  • python2.x在所有情况下都比python3.x快(对我来说)
  • 对于示例列表,列表理解速度最快,但对于较大的列表,map速度更快。对于小列表,map可能较慢,因为您需要查找函数,而列表理解不能"隐藏",因此不需要执行查找。对于庞大的列表,可能还有另一个转折点,即构建中间列表所需的时间变得非常重要
  • 生成器表达式总是最慢的(但在这两种情况下都是惰性的)

最新更新