3

我有一个这样的元组列表(字符串是填充符......我的实际代码对这些有未知值):

list = [
  ('one', 'two', 'one'),
  ('one', 'two', 'one', 'two', 'one'),
  ('one', 'two', 'one', 'two', 'one', 'two', 'one'...)
]

我想将所有其他字符串(在本例中为“两个”字符串)包装在<strong> </strong>标签中。令人沮丧的是我不能这样做,'<strong>'.join(list)因为其他每个人都没有/。这是我能想到的唯一方法,但标志的使用让我感到困扰......而且我似乎在谷歌机器上找不到关于这个问题的任何其他内容。

def addStrongs(tuple):
  flag = False
  return_string = ""
  for string in tuple:
    if flag :
      return_string += "<strong>"
    return_string += string
    if flag :
      return_string += "</strong>"
    flag = not flag
  return return_string

formatted_list = map(addStrongs, list)

如果这是错误的,我深表歉意,我还是 python 新手。有一个更好的方法吗?我觉得这在其他领域也很有用,比如添加左/右引号。

4

5 回答 5

5
>>> tuple = ('one', 'two', 'one', 'two', 'one')
>>> ['<strong>%s</strong>' % tuple[i] if i%2 else tuple[i] for i in range(len(tuple))]
['one', '<strong>two</strong>', 'one', '<strong>two</strong>', 'one']
于 2012-04-22T19:40:16.313 回答
4
from itertools import cycle
xs = ('one', 'two', 'one', 'two', 'one')
print [t % x for x, t in zip(xs, cycle(['<strong>%s</strong>', '%s']))]

使用cycle你可以应用于比“其他”更复杂的模式。

于 2012-04-22T19:51:45.463 回答
1

比 unbeli 的回答稍微 Pythonic:

item = ('one', 'two', 'one', 'two', 'one')
['<strong>%s</strong>' % elem if i % 2 else elem for i, elem in enumerate(item)]
于 2012-04-22T19:47:47.553 回答
1

@jhibberd 的回答很好,但以防万一,这里没有导入的相同想法:

a = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i')
formats = ['%s', '<strong>%s</strong>']
print [formats[n % len(formats)] % s for n, s in enumerate(a)]
于 2012-04-22T21:22:18.277 回答
0

你也可以用enumerate。对我来说,它看起来更干净。

tuple = ('one', 'two', 'one', 'two', 'one')
['<strong>%s</strong>' % x if i%2 else x for i, x in enumerate(tuple)]
于 2012-04-22T19:46:42.133 回答