【问题标题】:Python strings and integer concatenation [duplicate]Python字符串和整数连接[重复]
【发布时间】:2011-02-20 07:14:36
【问题描述】:

我想在 for 循环中使用附加的整数创建字符串。像这样:

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

但是它返回一个错误:

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

连接字符串和整数的最佳方法是什么?

【问题讨论】:

  • 应该t it be range(1,10)`?
  • 您的问题不清楚。你想得到什么输出? string = "string10"? string = "string1string2string3string4string5string6string7string8string9string10"?十个不同的变量?
  • @stephan: +1,但应该是range(1,11) :)
  • @Tim: 甚至range(11) 正在看评论...
  • @michele 您是否有机会更改此问题的已接受答案?反引号已弃用,不应使用。

标签: python string integer concatenation


【解决方案1】:

注意:

此答案中使用的方法(反引号)在更高版本的 Python 2 中已弃用,并在 Python 3 中删除。请改用 str() 函数。


你可以使用:

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

它将打印string012345678910

要获得string0, string1 ..... string10,您可以按照@YOU 的建议使用它

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

根据 Python3 更新

你可以使用:

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

它将打印string012345678910

要获得string0, string1 ..... string10,您可以按照@YOU 的建议使用它

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

【讨论】:

  • 如果我输入这个:47,那么为什么我会在我的字符串中得到这个:u'47'
  • 这个答案已经过时了。反引号已过时,已在 Python 3 中删除。有关更多详细信息,请参阅this question。这个问题的其他答案是更好的解决方案。
  • @RogerFan,没错!不知道,我的回答是怎么得到这么多赞的o_o没想到会这样!
  • 反引号相当于repr() 函数,而不是str()。对于非整数值,repr()str() 的结果可能会有很大差异。
  • 在 Python3 中,你可以像这样使用 f 字符串:string = f'{str}{number}'
【解决方案2】:
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']

【讨论】:

  • 我是不是错过了什么来获得反对票?
  • 仍然值得一提的是,反引号等价于repr(),而不是str()
  • Bastien,谢谢你的来信,但我想我不会再把它放回去了。
  • 嗯,我试图删除我的投票(只是一个测试),然后再次投票;投票被禁止,但我不能再投票了......(“除非编辑此答案,否则您的投票现在已锁定”)
  • @Bastien,是的,有 5 分钟的窗口可以撤消赞成/反对票,但是一旦结束,它就会卡住,直到下一次编辑才能进行不同的投票。我认为这是设计使然
【解决方案3】:
for i in range[1,10]: 
  string = "string" + str(i)

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

【讨论】:

    【解决方案4】:
    string = 'string%d' % (i,)
    

    【讨论】:

    • 当你有多个格式说明符时,你只需要使用一个列表来格式化,否则,它很丑:)
    • 那不是列表,那是元组。如果要格式化的单个项目本身就是一个元组,你也需要它。
    【解决方案5】:
    for i in range(11):
        string = "string{0}".format(i)
    

    你所做的 (range[1,10]) 是

    • 类型错误,因为括号表示列表的索引 (a[3]) 或切片 (a[3:5]),
    • 一个语法错误,因为[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 是一个类型错误,因为您不能将整数添加到字符串中(与 JavaScript 不同)。

    Python's new string formatting method的文档,很强大。

    【讨论】:

    • (更正:如果你使用range={(1,10): "foo"},那么range[1,10]实际上是一个语法上有效的表达式。)
    【解决方案6】:

    您可以使用生成器来执行此操作!

    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))+']'
    

    【讨论】:

      【解决方案7】:

      如果我们想要像'string0123456789' 这样的输出,那么我们可以使用map functionjoin 字符串方法。

      >>> 'string'+"".join(map(str,xrange(10)))
      'string0123456789'
      

      如果我们想要字符串值列表,则使用list comprehension 方法。

      >>> ['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()

      【讨论】:

        【解决方案8】:

        我做了其他事情。 我想替换列表外列表中包含短语的单词。 我想用一个新词替换该字符串/单词,该词将是字符串和数字之间的连接,并且该数字/数字将指示短语/子列表/列表列表的位置。

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

            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
        

        【讨论】:

          【解决方案9】:

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

          abhishek+str(2)
          

          【讨论】: