2012-02-04 105 views
2

我想将一个int数组(如这个[1, 1, 2, 1])转换成一个字符串("1121")。将int数组转换为字符串的最佳方式是什么?

什么是最好的(最pythonic)的方式来做到这一点?

我总是做这样的事情,然后删除多余的括号:

>>> str([1, 2, 1, 1]) 
'[1, 2, 1, 1]' 

或者我可以做这样的事情:

s = "" 
for i in [1, 2, 1, 1]: 
    s += s(i) 

但是这两种方法感到有点不稳。有没有更好的方法来做到这一点?

为了记录,我自然对所有版本的Python感兴趣,但我正在研究py2.7,并且更喜欢使用此版本的答案。

回答

5

生成表达式:

"".join(str(i) for i in l) 

PS:你的 “阵列” 是一个真正的名单。

+0

绝对是一个列表。我经过6个月强烈的C后才刚回到Python。这肯定会发生:s – rahmu 2012-02-04 19:03:03

5

尝试:

l = [1, 2, 1, 1] 
s = ''.join(map(str, l)) 
print(s) 

这里,map(str, l)转换成l字符串列表,并''.join(...)合并的字符串。

+0

另外'“”。加入(STR(X)为长x )'可以读取更整齐(并避免Python 2.x中的中间列表,尽管*可以通过itertools.imap来避免)。 – delnan 2012-02-04 18:59:26

+7

@delnan由于* str.join *对数据进行了两次传递,因此如果您给它一个开头的列表,它将运行得更快。这是少数情况下总是需要中间列表的情况之一(如果不提供中间列表,* str.join *必须自己创建一个)。 – 2012-02-04 19:20:52

+2

@RaymondHettinger:+1有趣的是,没有考虑到这一点(但它现在有意义 - 一次计算结果字符串的大小和一次构建它的过程)。我可能仍然使用习惯中的生成器表达并保持一致性。 – delnan 2012-02-04 19:23:12

4

试试这个:

lst = [1, 2, 1, 1] 
''.join(str(x) for x in lst) 

它是有效的,因为它不产生中间列表(map那样),而是遍历此列表使用迭代器。

0

这一个是只是为了好玩,因为它只有在列表中的每个元素是个位数的整数作品:

lst = [1, 1, 0, 1] 

def convert_to_str(): 
    new_num = 0 
    for i in xrange(len(lst)): 
     new_num += lst[i]*(10**(len(lst)-1-i)) 
    return str(new_num) 
+0

or str(reduce(lambda a,b:a * 10 + b,lst)) – greggo 2012-04-25 22:12:09

相关问题