Python字符串和整数连接[重复]
Posted
技术标签:
【中文标题】Python字符串和整数连接[重复]【英文标题】:Python strings and integer concatenation [duplicate] 【发布时间】: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 您是否有机会更改此问题的已接受答案?反引号已弃用,不应使用。
【参考方案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'strnumber'【参考方案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 = "string0".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 function
和join
字符串方法。
>>> '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)
【讨论】:
以上是关于Python字符串和整数连接[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Python 3.5 与 2.7 之间字符串连接的巨大时间差异
带有带有整数键的dict的python字符串格式()[重复]