我怎样才能增加一个字符?

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 中,只需使用 ordchr 函数:

>>> 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.uppercasestring.letters

Python 没有for(;;),因为通常有更好的方法来做到这一点。它也没有字符数学,因为它也不是必需的。

【讨论】:

以上是关于我怎样才能增加一个字符?的主要内容,如果未能解决你的问题,请参考以下文章

我的子查询将执行时间增加了 20 秒。我怎样才能加快速度?

我只(总是)为 Youtube Data Api v3 获得 10 个 nextpagetoken;我怎样才能增加这个?

我怎样才能降低 JSP 内存使用率。?

我怎样才能得到一个字符串的所有字谜

我怎样才能设置一个id而不是字符串

我怎样才能得到一个字符串旁边的另一个字符串? [复制]