我怎样才能增加一个字符?
Posted
技术标签:
【中文标题】我怎样才能增加一个字符?【英文标题】:How can I increment a char? 【发布时间】:2011-01-10 13:02:37 【问题描述】:我是 Python 的新手,来自 Java 和 C。如何增加 char?在 Java 或 C 中,chars 和 int 实际上是可以互换的,并且在某些循环中,能够对 chars 进行增量以及按 chars 索引数组对我来说非常有用。
如何在 Python 中做到这一点?没有传统的 for(;;) 循环器已经够糟糕了 - 有什么方法可以实现我想要实现的目标,而无需重新考虑我的整个策略?
【问题讨论】:
传统for
循环:for i in range(50): do_something_with(i)
。来吧,那还不错!!
@SilentGhost:我正在拆分一个英语词典,以便在 android 应用程序中使用。因为单独的文件太大,我编写了一个 Python 脚本将它们拆分为 words_aa.txt、words_ab.txt 等...我需要编写第二个脚本来生成一个 Java 文件,其中包含一个包含 Id 的数组每个word文件的原始文件资源(因为我比较懒),想不出更好的办法。
你似乎在寻找类似[''.join(i) for i in itertools.product(string.ascii_lowercase, repeat=2)]
的东西
@SilentGhost:这就是全部吗?要是说明书上说的就好了。
【参考方案1】:
检查这个:使用 FOR LOOP
for a in range(5):
x='A'
val=chr(ord(x) + a)
print(val)
循环输出:A B C D E
【讨论】:
【参考方案2】:对我来说,我将休闲作为一种测试。
string_1="abcd"
def test(string_1):
i = 0
p = ""
x = len(string_1)
while i < x:
y = (string_1)[i]
i=i+1
s = chr(ord(y) + 1)
p=p+s
print(p)
test(string_1)
【讨论】:
您使用了与已接受答案相同的逻辑,用类似的解决方案获得新答案有什么意义? 我喜欢干净的代码,在本节中没有看到任何让我满意的解决方案,因此我投入了 2 美分。【参考方案3】:有一种方法可以使用string
包中的ascii_letters
增加字符,其中ascii_letters
是一个包含所有英文字母、大写和小写的字符串:
>>> from string import ascii_letters
>>> ascii_letters[ascii_letters.index('a') + 1]
'b'
>>> ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
也可以手动完成;
>>> letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> letters[letters.index('c') + 1]
'd'
【讨论】:
【参考方案4】:在 Python 2.x 中,只需使用 ord
和 chr
函数:
>>> ord('c')
99
>>> ord('c') + 1
100
>>> chr(ord('c') + 1)
'd'
>>>
Python 3.x 使这更加有条理和有趣,因为它在字节和 unicode 之间有明显的区别。默认情况下,“字符串”是 unicode,因此上述方法有效(ord
接收 Unicode 字符,chr
生成它们)。
但是如果你对字节感兴趣(比如处理一些二进制数据流),事情就更简单了:
>>> bstr = bytes('abc', 'utf-8')
>>> bstr
b'abc'
>>> bstr[0]
97
>>> bytes([97, 98, 99])
b'abc'
>>> bytes([bstr[0] + 1, 98, 99])
b'bbc'
【讨论】:
@Tom R. 不要! [怀念过去的日子]。当您尝试快速实现某件事或转换一段代码时,Python 的概念和习语似乎只会阻碍您的进步,并且几乎不值得学习曲线......请耐心等待!您甚至可能会发现精通 Python 会改善您在 Java(和 C,在较小程度上)的风格。 就像一个魅力。 我要做的唯一更改是针对 z,在这种情况下,我分配了一个“a”。【参考方案5】:def doubleChar(str):
result = ''
for char in str:
result += char * 2
return result
print(doubleChar("amar"))
输出:
aammaarr
【讨论】:
【参考方案6】:我来自 php,您可以在其中使用 ++ 运算符递增 char(A 到 B,Z 到 AA,AA 到 AB 等)。我做了一个简单的函数,它在 Python 中做同样的事情。您还可以将字符列表更改为您需要的任何字符(小写、大写等)。
# Increment char (a -> b, az -> ba)
def inc_char(text, chlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
# Unique and sort
chlist = ''.join(sorted(set(str(chlist))))
chlen = len(chlist)
if not chlen:
return ''
text = str(text)
# Replace all chars but chlist
text = re.sub('[^' + chlist + ']', '', text)
if not len(text):
return chlist[0]
# Increment
inc = ''
over = False
for i in range(1, len(text)+1):
lchar = text[-i]
pos = chlist.find(lchar) + 1
if pos < chlen:
inc = chlist[pos] + inc
over = False
break
else:
inc = chlist[0] + inc
over = True
if over:
inc += chlist[0]
result = text[0:-len(inc)] + inc
return result
【讨论】:
【参考方案7】:“没有传统的 for(;;) looper 已经够糟糕了”??什么?
你在尝试吗
import string
for c in string.lowercase:
...do something with c...
或者您正在使用string.uppercase
或string.letters
?
Python 没有for(;;)
,因为通常有更好的方法来做到这一点。它也没有字符数学,因为它也不是必需的。
【讨论】:
以上是关于我怎样才能增加一个字符?的主要内容,如果未能解决你的问题,请参考以下文章
我只(总是)为 Youtube Data Api v3 获得 10 个 nextpagetoken;我怎样才能增加这个?