Python字符串和整数拼接

394

我想在一个for循环中创建一个包含整数的字符串。 像这样:

for i in range(1, 11):
  string = "string" + i

但它返回了一个错误:

TypeError: unsupported operand type(s) for +: 'int' and 'str'

如何最好地连接字符串和整数?


7
应该是range(1,10)吧? - stephan
你的问题不够清晰。你想要得到什么输出?是 string = "string10" 吗?还是 string = "string1string2string3string4string5string6string7string8string9string10"?或者是十个不同的变量? - badp
1
@stephan:+1,但应该是range(1,11) :) - Tim Pietzcker
2
@Tim:也许甚至可以看一下注释中的range(11)... - stephan
@michele 你有没有可能更改这个问题上的被接受的答案?反引号已经过时,不应该再使用了。 - Roger Fan
抱歉,我正在阅读答案,发现这一切都很奇怪,只需执行以下操作并以此结束: for i in range(1,11): string += str(i) - Windgate
9个回答

313

注意:

该回答中使用的方法(反引号)在Python 2的后续版本中已过时,并在Python 3中被删除。请改用str()函数。


你可以使用以下代码:

string = 'string'
for i in range(11):
    string +=`i`
print string

它将打印string012345678910

要获取string0,string1 ... string10,您可以使用此作为您建议的

>>> string = "string"
>>> [string+`i` for i in range(11)]

针对 Python 3

你可以使用:

string = 'string'
for i in range(11):
    string += str(i)
print string

它将打印string012345678910

要获取string0,string1 ..... string10,您可以像你建议的那样使用:

>>> string = "string"
>>> [string+str(i) for i in range(11)]

33
这个回答已经过时。反引号(backticks)在Python 3中已经被移除,不再使用。有关更多详细信息,请参见此问题。对于这个问题,其他答案提供了更好的解决方案。 - Roger Fan
@RogerFan,是啊!不知道为什么我的回答会有这么多赞 o_o 没想到啊! - Anirban Nag 'tintinmj'
@neoDev 是指哪一个? - Anirban Nag 'tintinmj'
2
在Python3中,你可以像这样使用f-字符串: string = f'{str}{number}' - Ahmed Rezk
请将Python 3版本放在Python 2之前 --- 一个懒惰的复制粘贴者 - Benjam
显示剩余3条评论

277
for i in range (1,10):
    string="string"+str(i)

要获取string0,string1 ..... string10,你可以像这样操作

>>> ["string"+str(i) for i in range(11)]
['string0', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string8', 'string9', 'string10']

我是否漏掉了什么导致被踩? - YOU
3
值得一提的是反引号与 repr() 等价,而不是等价于 str() - Bastien Léonard
1
Bastien,谢谢你的留言,但我想我不会再把它放回去了。 - YOU
1
嗯,我试图取消我的投票(只是一个测试),然后再次投票; 投票被抑制了,但我不能再点赞了...(“除非此答案被编辑,否则您的投票现在已锁定”) - Bastien Léonard
1
@Bastien,是的,撤销赞/踩有5分钟的时间窗口,但一旦过了这个时间,就无法更改投票,直到下一次编辑。我认为这是按设计来的。 - YOU

39
for i in range[1,10]: 
  string = "string" + str(i)

str(i)函数将整数转换为字符串。


35
string = 'string%d' % (i,)

只有当您有多个格式说明符时,才需要使用列表进行格式化,否则会很丑 :) - L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
4
那不是一个列表,那是一个元组。如果要格式化的单个项目本身是元组,则还需要它。 - Ignacio Vazquez-Abrams

22
for i in range(11):
    string = "string{0}".format(i)

你输入的是 (range[1,10]):

  • 会导致 TypeError,因为方括号用于访问列表中的索引 (a[3]) 或者切片 (a[3:5]),而不是用于 range() 函数的参数。
  • 会导致 SyntaxError,因为 [1,10] 不是有效的参数。
  • 会出现双重偏移错误,因为 range(1,10) 生成的结果是 [1, 2, 3, 4, 5, 6, 7, 8, 9],而你似乎想要的是 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

string = "string" + i 会导致 TypeError,因为在 Python 中不能将整数与字符串相加(与 JavaScript 不同)。

查看Python 的新字符串格式化方法文档。它非常强大。


1
(更正:如果您执行range={(1,10): "foo"},那么range[1,10]实际上是一个语法上有效的表达式。) - Tim Pietzcker

4
你可以使用生成器来完成这个任务!
def sequence_generator(limit):
    """ A generator to create strings of pattern -> string1,string2..stringN """
    inc  = 0
    while inc < limit:
        yield 'string' + str(inc)
        inc += 1

# To generate a generator. Notice I have used () instead of []
a_generator  =  (s for s in sequence_generator(10))

# To generate a list
a_list  =  [s for s in sequence_generator(10)]

# To generate a string
a_string =  '['+ ", ".join(s for s in sequence_generator(10)) + ']'

1
如果我们想要输出类似于'string0123456789'的结果,那么我们可以使用map函数和stringjoin方法。
>>> 'string' + "".join(map(str, xrange(10)))
'string0123456789'

如果我们想要一个字符串值的列表,则使用列表推导方法。
>>> ['string'+i for i in map(str,xrange(10))]
['string0', 'string1', 'string2', 'string3', 'string4', 'string5', 'string6', 'string7', 'string8', 'string9']

注意:

在Python 2.x中使用xrange()

在Python 3.x中使用range()


也许可以对所有这些函数提供文档链接(非裸链接)?(但是不要包括“编辑:”,“更新:”或类似的内容 - 回答应该看起来像今天写的。) - Peter Mortensen

1

我做了其他事情。

我想要替换包含短语的列表中的单词。

我希望用一个由字符串和数字组成的新单词来替换该字符串/单词,这个数字将指示短语/子列表/列表中列表的位置。

也就是说,我用一个字符串和随后的递增数字替换了一个字符串。

myoldlist_1 = [[' myoldword'], [''], ['tttt myoldword'], ['jjjj ddmyoldwordd']]
    No_ofposition = []
    mynewlist_2 = []
    for i in xrange(0, 4, 1):
        mynewlist_2.append([x.replace('myoldword', "%s" % i + "_mynewword") for x in myoldlist_1[i]])
        if len(mynewlist_2[i]) > 0:
            No_ofposition.append(i)

mynewlist_2
No_ofposition

-6

字符串和整数的连接很简单:只需使用

abhishek+str(2)

如果这么简单,请解释一下(在此处或答案中),为什么之前的七个答案不是这样?例如,Python 的后续版本是否有所改变? - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接