您可以尝试以下方法:
>>> word = [''.join(letters) for letters in zip(*(list(word) for word in a.split('-')))]
>>> word
['penguinjmkj','azostrichos','nmiksonevar','dllamatcslr','aakbacrabaf','xetokhwhatd','nsxooifkyco','gorftmlkkwl','ewesupytalp','qxeffarigkh','racoonkkofi','yqyxdzhldmn','mbtdhecswru','turtledvgwy','sjqersuhcbt']
说明:
如果您打印单个零件,您可以了解它的作用,
例如:
>>> print(*(list(word) for word in a.split('-'))
['p','a','n','d','x','g','e','q','r','y','m','t','s','o'] ['e','z','l','o','w','b','u','j','l'] ['n','i','k','c','l'] ['g','f','i'] ['u','h','d'] ['i','p','a'] ['n','m'] ['j','v','r'] ['m','a'] ['k','b'] ['j','t']
因此它将-
分隔的所有单个单词分解为字符。
然后zip
执行此操作:
>>> print(zip(*(list(word) for word in a.split('-'))))
('p','j') ('a','s') ('n','r') ('d','r') ('a','f') ('x','d') ('n','o') ('g','l') ('e','p') ('q','h') ('r','i') ('y','n') ('m','u') ('t','y') ('s','t')
因此,它从每个组中获取所有对应的字符,每个元组在主代码的每次迭代中均以letters
的形式传递。
然后,您join
每个元组,例如在第一次迭代中:
>>> ''.join(('p','j'))
'penguinjmkj'
[<item after some operation> for <each item> in <item_list>]
此结构称为list comprehension
。 *
用于iterable unpacking。
,
花了一段时间,但我破解了;
您只需要处理索引错误:字符串超出范围。
如果您计算单词的个数超过16,而拆分后的数组项刚好超过11。使用try_except处理异常,在以下位置附加字母:
word+= elem[i]
这是我的代码,以及如何使用try_catch解决它
a = "pandaxngeqrymtso-ezmlaesowxaqbujl-noilktxreecytrql-gskaboofsfoxdtei-utsmakotufodhlrd-iroachimpanzeesa-nintrwflyrkhcdum-jcecahkktiklsvhr-mhvsbaykagodwgca-koalatcwlkfmrwbb-jsrrfdolphinuyt"
newArr = a.split('-')
newWord = []
i = 0
mylist = []
while i < len(newArr[0]):
word = ""
for item in newArr:
try:
word += item[i]
except:
break
i += 1
mylist.append(word)
print(mylist)
我在添加字母时使用try_except处理索引错误,然后在while循环中使用的“ i”大于for循环中的newArr长度时中断。
为自己而努力!
,
类似于Sayandip的代码,但过去对我来说更具可读性:
mylist =[]
for element in zip(*a.split('-')):
mylist.append(''.join(element))
print(mylist)
我明白了
['penguinjmkj','sjqersuhcbt']
我在for循环中移动拆分,并使用*构造传递通过拆分产生的整个列表,请参见用法here和here。
本文链接:https://www.f2er.com/2928813.html