簡體   English   中英

Python 列表:在項目前后添加字符串

[英]Python list: add string before and after item

得到一個列表作為變量。 這些項目被傳輸到 HTML 格式的 email。 如果列表項以“-”開頭,則需要在其前后獲取 HTML 代碼才能獲取紅色文本。

所以基本上:如果一個列表項以'-'開頭,我需要在它之前添加一個字符串,然后在它之后添加一個。 我已經得到了這個:

mylist = ['no problem','also no problem','-this got to be red','no problem here']
before = '<p style="color:red">'
after = '</p>'

for i in mylist:
    if i.startswith('-'):
        i = newstr = " ".join((before,i,after))
        mylist.append(i)

print(mylist)

問題:它添加了新變量,但也保留了舊變量。 我需要更換它。 有什么建議么?

我建議在這里使用列表理解。 用這個替換 for 循環:

mylist = [' '.join((before, s, after)) if s.startswith('-') else s
               for s in mylist]
print(mylist)

列表理解將完全適合這種情況。 還有為什么不使用str.format而不是str.join

mylist = ['no problem','also no problem','-this got to be red','no problem here']
make_red = '<p style="color:red"> {} </p>'.format

mylist = [make_red(s) if s.startswith('-') else s for s in mylist]

使用賦值運算符=而不是append ,並枚舉列表,以便您可以使用索引對其進行操作:

for i, _ in enumerate(mylist):
    if mylist[i].startswith('-'):
        mylist[i] = ' '.join(before, mylist[i], after)

mylist.append(i)會將新項目添加到您的列表中,您可以使用他們的索引來更新您的列表

for i, item in enumerate(mylist):
    if item.startswith('-'):
        mylist[i] = " ".join((before,item,after))
print(mylist)
before = '<p style="color:red">'
after = '</p>'

# Option 1
mylist = ['no problem','also no problem','-this got to be red','no problem here']
for i, s in enumerate(mylist):
    if s.startswith('-'):
        mylist[i] = " ".join((before,s,after))
print(mylist)

# Option 2
mylist = ['no problem','also no problem','-this got to be red','no problem here']
mylist = list(map(lambda s: " ".join((before,s,after)) if s.startswith('-') else s, mylist))
print(mylist)

# Option 3
mylist = ['no problem','also no problem','-this got to be red','no problem here']
mylist = [" ".join((before,s,after)) if s.startswith('-') else s for s in mylist]
print(mylist)

那是因為你正在追加。 你需要更換它。 在這里對您的代碼進行小改動:

mylist = ['no problem','also no problem','-this got to be red','no problem here']
before = '<p style="color:red">'
after = '</p>'

for i in range(len(mylist)):
    if mylist[i].startswith('-'):
        mylist[i] =  " ".join((before,mylist[i],after))

print(mylist)

暫無
暫無

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

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