3

次のようなタプルのリストがあります(文字列はフィラーです...実際のコードにはこれらの値が不明です):

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

<strong> </strong>タグで他のすべての文字列 (この例では「2」文字列) をラップしたいと思います。'<strong>'.join(list)他のすべての人が / を持っていないので、私ができないのはイライラします。これは私が考えることができる唯一のアプローチですが、フラグの使用は私を悩ませます...そして、この問題についてGoogleマシンで他に何も見つけられないようです。

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

@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 に答える
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 に答える
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 に答える