Как мне подготовить строку для форматирования с неоднозначным массивом?

#python #string #formatting

#python #строка #форматирование

Вопрос:

Мне нужно отформатировать массив в строку, однако строка подготовлена и сохранена заранее. По сути, у меня есть список строк, которые выглядят примерно так:

 text = [
'Data Item 1: %.2f',
'Data Item 2: %.2f',
'Data Item 3: %.2f'
]
  

Затем этот список просматривается, и ему присваиваются данные, аналогичные этому:

 for i in range(len(text)):
  print(text[i] % data[i])
  

Это работает нормально, но теперь я хочу иметь возможность добавлять строку в мой текстовый список, который позже будет сопряжен с элементом списка, подобным этому:

 text = [
'Data Item 1: %.2f',
'Data Item 2: %.2f',
'Data Item 3: %.2f',
'Num List: <FORMATTING NEEDED>'
]

data = [0.3, 2.1, 4.9, [1, 2, 3, 4]]

for i in range(len(text)):
  print(text[i] % data[i])
  

Я хочу, чтобы это дало следующий результат:

 Data Item 1: 0.30
Data Item 2: 2.10
Data Item 3: 4.90
Num List: 1,2,3,4
  

Самое близкое к тому, что я ищу, что я нашел до сих пор, выглядит так:

 'Num List: [' ", ".join(['%.2f']*len(x)) "]'
  

Но у меня пока нет ‘x’. Мне нужно подготовить строку для списка, который нельзя использовать немедленно. Надеюсь, я правильно объяснил свою потребность.

Комментарии:

1. Если один из ответов сработал для вас, подумайте о том, чтобы пометить его как принятый.

Ответ №1:

Результат, который вы показываете по желанию, не содержит круглых скобок для списка, но в вашем коде попытки вы используете их, поэтому я предполагаю, что они в порядке.

В этом случае вы могли бы сделать что-то вроде:

 print('Num List: %s' % [1,2,3,4])
  

который печатает:

 Num list: [1, 2, 3, 4]
  

Ответ №2:

Я думаю, вы прошли большую часть пути, не могли бы вы просто превратить массив в строку, а затем включить ее в data список?

выполнение этого:

 l = [1,2,3,4]
l_string = ",".join(str(x) for x in l)
  

в результате получается строка, которая выглядит следующим образом:

 '0,1,2,3,4'
  

тогда вы могли бы просто включить эту строку в data , вот так:

 [0.3, 2.1, 4.9, ",".join(str(x) for x in l)]
  

вы также можете обернуть это в функцию в зависимости от вашего приложения, возможно, путем проверки списков и преобразования их в строки. Тогда ваш test будет выглядеть так:

 text = [
'Data Item 1: %.2f',
'Data Item 2: %.2f',
'Data Item 3: %.2f',
'Num List: %s'
]