这是我的(工作)代码:
groupes = [{'description': 'i am a letter', 'exemple': 'e1'},
{'description': 'i am a brick', 'exemple': 'e2'},
{'description': 'i am a dog', 'exemple': 'e3'}]
d = zip(*[g['description'] for g in groupes])
b = []
for a in d:
if len(set(a)) == 1:
b.append(set(a).pop())
else:
break
a = u''.join(b)
l = len(a)
print()
b = [u'{} "{}"'.format(b['description'][l:], b['exemple']) for b in groupes]
b = u', '.join(b).strip()
print(u'{} ({})'.format(a, b))
它输出所有共同的字母,并使用reste将其放在()
中。
我的问题是当共同的字母停在一个单词的中间时,就像这样:
groupes = [{'description': 'i am a douche', 'exemple': 'e1'},
{'description': 'i am a dandy', 'exemple': 'e2'},
{'description': 'i am a dog', 'exemple': 'e3'}]
然后你会得到:
i am a d (ouche "e1", andy "e2", og "e3")
我希望得到
i am a (douche "e1", dandy "e2", dog "e3")
知道怎么做“python方式”吗?
答案 0 :(得分:0)
添加:
if any(' ' != c for c in next(d,[])):
while b[-1] != ' ':
b.pop()
在for
循环之后。这样:
next()
通常会导致StopIteration
错误,因此请确保[]
默认此外,您应该将print(u'{} ({})'.format(a, b))
更改为print(u'{}({})'.format(a, b))
,以避免在打印字符串中的(
之前留出额外空间。
比这更可靠的方法是将zip
更改为:
d = zip(*[g['description'].split() for g in groupes])
分割每个字符串,而不是逐字逐句迭代。
请务必将join
更改为:
a = u' '.join(b) #space instead of empty string
*
明星?这用于参数解包。注意使用和不使用*:
传递列表(或在大多数情况下,任何可迭代的)之间的区别>>> def foo(a= None, b = None, c = None):
print('''
a: %s
b: %s
c: %s
''' %(str(a),str(b),str(c)))
>>> test = [1,2,3]
>>> foo(test)
a: [1, 2, 3]
b: None
c: None
>>> foo(*test)
a: 1
b: 2
c: 3