我有来自db类型的列表:
[[63], [426], [255], [167], [648], [364, 194], [686, 14]]
我想将它们转换为:
63 -1 426 -1 255 -1 167 -1 648 -1 364 194 -1 686 14 -1 -2 and newline
,即如果多个元素使用"空格"则在内部列表中分开。主要列表中的元素和使用" -1"最后a" -2"必须存在换行符 结果条目必须是数字 任何想法(最好使用正则表达式)? 谢谢!
答案 0 :(得分:0)
UPDATE:处理嵌套列表的解决方案:
final_list = []
my_list = [[63], [426], [255], [167], [648], [364, 194], [686, [7, 77, 777], 14]]
def recursive_convert(item):
if type(item) is list:
for i in item:
recursive_convert(i)
else:
final_list.append(item)
for sublist in my_list:
recursive_convert(sublist)
final_list.append(-1)
final_list.append(-2)
final_list.append('\n')
t = ' '.join(map(str, final_list))
print(t)
输出:
xclip -o > k2.py
python3 k2.py
63 -1 426 -1 255 -1 167 -1 648 -1 364 194 -1 686 7 77 777 14 -1 -2 \n
在嵌套子列表之前和之后没有-1
,因为OP说他希望只插入-1
来展示“主列表”的中断。
没有嵌套列表的解决方案:
final_list = []
my_list = [[63], [426], [255], [167], [648], [364, 194], [686, 14]]
for sublist in my_list:
for item in sublist:
final_list.append(item)
final_list.append(-1)
final_list += [-2, '\n']
' '.join(map(str, final_list))
输出:
63 -1 426 -1 255 -1 167 -1 648 -1 364 194 -1 686 14 -1 -2 \n
答案 1 :(得分:0)
你可以试试这个:
array = [[63], [426], [255], [167], [648], [364, 194], [686, 14]]
out = ''
for group in array:
for elt in group:
out += str(elt) + ' '
out += '-1 '
out += '-2 \n'
print(out)
哪个输出:
63 -1 426 -1 255 -1 167 -1 648 -1 364 194 -1 686 14 -1 -2 [newline]
你不需要在这里使用正则表达式,这甚至是一个坏主意,因为你正在处理列表。
希望它会有所帮助。
答案 2 :(得分:0)
采取"客户永远是对的"方法,尽管它是错误解决问题的方法,我们可以用正则表达式和字符串操作做一些事情。要处理任意列表深度,您还需要包含您最喜欢的压扁例程的实现:
import re
def flatten(array):
new_array = []
for element in array:
if isinstance(element, int):
new_array.append(element)
else:
new_array.extend(flatten(element))
return new_array
array = [[63], [426], [255], [167], [648], [364, 194], [686, [7, 77, 777], 14]]
string = re.sub(r'[,\[]', '', str(list(map(flatten, array)))).replace('] ', ' -1 ').replace(']]', ' -1 -2\n')
print(string, end='')
产生:
63 -1 426 -1 255 -1 167 -1 648 -1 364 194 -1 686 7 77 777 14 -1 -2