簡體   English   中英

嵌套的for循環中的字符串操作

[英]String manipulation in nested for loops

使用Python 2.7,想象一下我有兩個變量:

encoded_username = 'bender_in_soup_1234'
code = '000204071012'

code的字符串實際上指定了大寫字符在encoded_username的位置。 00表示第一個字符為大寫。 02表示第三個字符為大寫。 04表示第五個字符是大寫。 等等。 它可能會達到99usernames不能超過100個字符)。

完全解碼的用戶名是:

decoded_username = 'BeNdEr_In_SoUp_1234'

使用所提供的code來解碼encoded_username的最有效方法(在Python 2.7中)是什么?


我正在努力:

upper_case_positions = [code[i:i+2] for i in range(0,len(code),2)]
for position in upper_case_positions:
    encoded_username[position] = encoded_username[int(position)].upper()
return encoded_uname

但這只是給我'str' object does not support item assignment

此外,我將在解碼多個用戶名時解析它們,即上面的代碼將嵌套在for循環內。 for循環中包含for循環使我感到可以有一個更有效的解決方案。 你們有什么建議? 我很感興趣。

怎么樣:

encoded_username = 'bender_in_soup_1234'
code = '000204071012'

upper_case_positions = [int(code[i:i+2]) for i in range(0, len(code), 2)]

decoded_username = ''.join(let.upper() if pos in upper_case_positions else let 
                           for pos, let in enumerate(encoded_username))
print decoded_username

首先,您需要將upper_case_positions包裝為整數,以確保它們可用作位置。 我們枚舉單詞以返回每個字符及其相關位置,並在需要時更改大小寫。 使用空字符串加入將為我們提供輸出用戶名。 如預期的那樣,這將打印'BeNdEr_In_SoUp_1234'

在這里,您有一個使用ordchr

encoded_username = 'bender_in_soup_1234'
code = '000204071012'


def upperText(s, pos):
    gap = ord("a") - ord("A")
    upper_case_positions = [int(pos[i:i + 2]) for i in xrange(0, len(pos), 2)]
    txt = map(ord, s)
    for i in upper_case_positions:
        txt[i] -= gap
    return "".join(map(chr, txt))

print upperText(encoded_username, code)
BeNdEr_In_SoUp_1234

字符串是不可變的為什么Python字符串是不可變的? 使用它們的最佳實踐

您可以使用regexp分割成塊https://stackoverflow.com/a/25430739/123808

您可以在列表中進行轉換(可變)並在完成突變后重建字符串

import re

encoded_username = 'bender_in_soup_1234'
code = '000204071012'

encoded_username_list = list ( encoded_username )

upper_case_positions = [int(pos) for pos in re.findall('.{2}', code)]

for position in upper_case_positions:
    encoded_username_list[position] = encoded_username[position].upper()

print "".join(encoded_username_list)

BeNdEr_In_SoUp_1234

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM