我有一个数组,由一些字符串组成,我需要用星号包围每个字符串。所以对于输入:
def addAsterisks(["abc", "ded"])
输出应该是:`
["*abc*", "*ded*"]
这是我尝试过的,但不能让它工作(图片是输入数组):
for x in picture:
x = "*" + x + "*"
输出只是相同的字符串数组:
["abc", "ded"]
答案 0 :(得分:2)
def addAsterisks(l)
return ['*' + x + '*' for x in l]
myList = addAsterisks(["abc", "ded"])
是一个局部变量,因此一旦超出范围,更改它就毫无意义。例如,您可以返回修改后的列表并将其分配到某处:
x
答案 1 :(得分:1)
您必须修改列表以反映列表中的更改。我使用内联函数来实现紧凑的代码。
<强>代码强>
['*'+ i + "*" for picture in pictures]
<强>输入强>
["abc", "def"]
<强>输出强>
["*abc*", "*def*"]
答案 2 :(得分:1)
修改数组并返回到您要使用的位置。修改临时变量(x)不会起作用,因为一旦超出范围,你将松开它。
def addAsterisks(string_list):
return ['*' + x + '*' for x in string_list]
print addAsterisks(["abc", "ded"])
这将输出:
['*abc*', '*ded*']
答案 3 :(得分:1)
您也可以使用str.format()
:
def addAsterisks(a):
# Or:
# return ["*%s*" %k for k in a]
return ["*{}*".format(k) for k in a]
print(addAsterisks(["abc", "ded"]))
>>> ['*abc*', '*ded*
答案 4 :(得分:0)
您正在分配一个临时变量return ["*" + x + "*" for x in picture]
,它不会更改实际列表。尝试改为
for i,x in enumerate(picture):
picture[i] = "*" + x + "*"
或者,如果你想要一个循环:
{{1}}
答案 5 :(得分:0)
你也可以这样做:
In [22]: def addAsterisks(s):
...: newarr = []
...: for i in s:
...: newstr = "*" + str(i) + "*"
...: newarr.append(newstr)
...: print(newarr)
...:
In [23]: addAsterisks(["abc", "ded"])
['*abc*', '*ded*']
答案 6 :(得分:0)
以下是解决这个问题的Pythonic方法:
A = [ "*"+a+"*" for a in picture ]
提示:阅读Python中的 list comprehension 。
答案 7 :(得分:0)
我在聚会上迟到了。
对于特定的用例,其他解决方案更好,但这可能会对其他人有所帮助(这与其他答案完全不同)。
如果您真的确定每个字符串的长度恰好是三个,则可以执行以下操作:
def addAsterisks(items):
return [ f'{value:*^5}' for value in items ]
addAsterisks(["abc","def"])
请注意,如果您将5更改为7,则每个字符串都带有2个星号