具有特定字符的数组中的环绕字符串

时间:2017-06-10 08:49:28

标签: python string list

我有一个数组,由一些字符串组成,我需要用星号包围每个字符串。所以对于输入:

def addAsterisks(["abc", "ded"])

输出应该是:`

["*abc*", "*ded*"]

这是我尝试过的,但不能让它工作(图片是输入数组):

for x in picture:
   x = "*" + x + "*"

输出只是相同的字符串数组:

["abc", "ded"]

8 个答案:

答案 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个星号