将int数组转换为字符串的最佳方式是什么?
我想将一个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,并且更喜欢使用此版本的答案。
生成表达式:
"".join(str(i) for i in l)
PS:你的 “阵列” 是一个真正的名单。
尝试:
l = [1, 2, 1, 1]
s = ''.join(map(str, l))
print(s)
这里,map(str, l)
转换成l
字符串列表,并''.join(...)
合并的字符串。
另外'“”。加入(STR(X)为长x )'可以读取更整齐(并避免Python 2.x中的中间列表,尽管*可以通过itertools.imap来避免)。 – delnan 2012-02-04 18:59:26
@delnan由于* str.join *对数据进行了两次传递,因此如果您给它一个开头的列表,它将运行得更快。这是少数情况下总是需要中间列表的情况之一(如果不提供中间列表,* str.join *必须自己创建一个)。 – 2012-02-04 19:20:52
@RaymondHettinger:+1有趣的是,没有考虑到这一点(但它现在有意义 - 一次计算结果字符串的大小和一次构建它的过程)。我可能仍然使用习惯中的生成器表达并保持一致性。 – delnan 2012-02-04 19:23:12
试试这个:
lst = [1, 2, 1, 1]
''.join(str(x) for x in lst)
它是有效的,因为它不产生中间列表(map
那样),而是遍历此列表使用迭代器。
这一个是只是为了好玩,因为它只有在列表中的每个元素是个位数的整数作品:
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)
or str(reduce(lambda a,b:a * 10 + b,lst)) – greggo 2012-04-25 22:12:09
绝对是一个列表。我经过6个月强烈的C后才刚回到Python。这肯定会发生:s – rahmu 2012-02-04 19:03:03