[英]String manipulation in nested for loops
使用Python 2.7,想象一下我有兩個變量:
encoded_username = 'bender_in_soup_1234'
code = '000204071012'
code
的字符串實際上指定了大寫字符在encoded_username
的位置。 即00
表示第一個字符為大寫。 02
表示第三個字符為大寫。 04
表示第五個字符是大寫。 等等。 它可能會達到99
( usernames
不能超過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'
在這里,您有一個使用ord
和chr
:
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.