aa
列表是我的输入,bb
列出了我想要的输出。操作相当简单(将aa
中的每个元素更改为字符串,附加一些字符,同时保持原始形状),但我这样做的方式似乎不必要地复杂。
有更好的(更多Pythonic)方法吗?
aa = [0, 5, 6, [8], 3, [9, 2]]
bb = []
for e1 in aa:
if type(e1) == list:
bb2 = []
for e2 in e1:
bb2.append('sss' + str(e2))
bb.append(bb2)
else:
bb.append('sss' + str(e1))
print(bb)
['sss0', 'sss5', 'sss6', ['sss8'], 'sss3', ['sss9', 'sss2']]
答案 0 :(得分:7)
您可以使用递归列表推导来实现此目的
def f(data):
return [f(i) if isinstance(i, list) else 'sss{}'.format(i) for i in data]
例如
>>> aa = [0, 5, 6, [8], 3, [9, 2]]
>>> f(aa)
['sss0', 'sss5', 'sss6', ['sss8'], 'sss3', ['sss9', 'sss2']]
答案 1 :(得分:1)
您可以执行您的问题标题已经暗示的内容,即使用递归:
spec:
containers:
- name: my-service
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: /etc/gcp/application-credentials.json
答案 2 :(得分:1)
嗯,递归地做一个更简洁的方法是
def addSSS(item):
if isinstance(item, list):
# map takes a function, and a list and returns a
# new list that is the result of applying the function
# to each element. list() converts the result to a list
return list(map(addSSS, item))
# if it's not a list simply append the string and return that value
return "sss" + str(item)
bb = list(map(addSSS, aa))
地图很不错,因为他们不会立即评估每个元素,只是在需要时,当然在这里,当您致电list()
将其转回列表时,会立即对其进行评估
这样做还有一个额外的好处,就是当你的列表比aa = [1, 2, [1, 2, [1, 2]]]