Python 从字符串列表中提取特定元素并创建新列表?
我是python的初学者 这是我的问题。我有一个清单如下Python 从字符串列表中提取特定元素并创建新列表?,python,list,Python,List,我是python的初学者 这是我的问题。我有一个清单如下 lst = ['UGAGGUAGUAGGUUGUAUAGUU', 'CUAUGCAAUUUUCUACCUUACC', 'UCCCUGAGACCUCAAGUGUGA', 'ACACCUGGGCUCUCCGGGUACC', 'CAUACUUCCUUACAUGCCCAUA', 'UGGAAUGUAAAGAAGUAUGUA', 'CAUCAAAGCGGUGGUUGAUGUG', 'UAUCACAGCCAGCUUUGAU
lst = ['UGAGGUAGUAGGUUGUAUAGUU', 'CUAUGCAAUUUUCUACCUUACC', 'UCCCUGAGACCUCAAGUGUGA',
'ACACCUGGGCUCUCCGGGUACC', 'CAUACUUCCUUACAUGCCCAUA', 'UGGAAUGUAAAGAAGUAUGUA',
'CAUCAAAGCGGUGGUUGAUGUG', 'UAUCACAGCCAGCUUUGAUGUGC', 'AGGCAGUGUGGUUAGCUGGUUG',
'ACGGCUACCUUCACUGCCACCC']
现在我需要从lst
中的所有10个元素中提取第一个字母,然后将它们放入一个新列表中。类似地,第二个字母、第三个字母等等,直到从所有十个元素中提取最后一个字母,并将其附加到新列表中。输出必须如下所示
new_lst = ['UCUACUCUAA', 'GUCCAGAAGC', 'AACAUGUUGG', 'GUCCAACCCG', 'GGUCCAAAAC',
'UCGUUUACGU', 'AAAGUGAAUA', 'GAGGCUGGGC', 'UUAGCACCUC', 'AUCCUAGCGU', ..., 'C']
我尝试了以下代码:
new_lst = []
new_lst.append(''.join([x[i] for x in lst]))
上面的代码只打印新_列表中的前10个元素,因为索引是从0到9(我误解了索引的含义)
然后我做了下面的事情
final= []
for j in range(1,len(lst),1):
new_lst = []
for x in lst:
c = len(x)
for i in range(1,c,1):
while (i<len(x)):
new_lst.append(x[i])
else:
new_lst.append("")
final.append([new_lst])
print final
我得到了以下输出:
22
0u1g2a3g4g5u6a7g8u9a10g11g12u13u14g15u16a17u18a19g20u21u22
0c1u2a3u4g5c6a7a8u9u10u11u12c13u14a15c16c17u18u19a20c21c21
0 U 1 C 2 C 3 C 4 U 5 G 6 A 7 G 8 A 9 C 10 C 11 U 12 C 13 A 14 A 15 G 16 U 17 G 18 U 19 G 20 A 22
0a1c2a3c4c5u6g7g8g9c10u11c12u13c14c15g16g17g18u19a20c21c22
0c1a2u3a4c5u6u7c8c9u10u11a12c13a14u15g16c17c18c19a20u21a21
0u1g2g3a4a5u6g7u8a9a10a11g12a13a14g15u16a17u18g19u20a22
0c1a2u3c4a5a6a7g8c9g10g11u12g13g14u15u16g17a18u19g20u21g23
0u1a2u3c4a5c6a7g8c9c10a11g12c13u14u15u16g17a18u19g20u21g22c22
0a1g2g3c4a5g6u7g8u9g10g11u12u13a14g15c16u17g18g19u20u21g22
0a1c2g3g4c5u6a7c8c9u10u11c12a13c14u15g16c17c18a19c20c21c
如上图所示,循环经过第一个元素,但在从lst
中的第一个元素提取第一个字符后,它转到第一个元素中的第二个字符。但是我希望循环通过列表中的第二个元素lst
。此外,列表中还有长度不等的元素,因此想知道是否有办法避免索引器:字符串索引超出范围
我想我错过了什么,这可能太傻了。对不起,我太天真了。如果你能提出不同的方法来完成这项工作,那就太棒了。我在线查看了使用模块numpy中的数组,但是没有numpy有什么方法可以做到这一点吗?您需要遍历最长字符串的索引:
lst = ['UGAGGUAGUAGGUUGUAUAGUU', 'CUAUGCAAUUUUCUACCUUACC',
'UCCCUGAGACCUCAAGUGUGA', 'ACACCUGGGCUCUCCGGGUACC',
'CAUACUUCCUUACAUGCCCAUA', 'UGGAAUGUAAAGAAGUAUGUA',
'CAUCAAAGCGGUGGUUGAUGUG', 'UAUCACAGCCAGCUUUGAUGUGC',
'AGGCAGUGUGGUUAGCUGGUUG', 'ACGGCUACCUUCACUGCCACCC']
max_len = max(len(x) for x in lst) # length of the longest string
new_lst = [ ''.join(x[i] for x in lst if i < len(x)) for i in range(max_len)]
lst=['ugagguagguguguguaguu'、'cuaugcaauuucuacuacc',
“UCCCUGAGACCACAGUGUGGA”、“ACACCUGGGCUCCGGGUACC”,
“Cauacucuuacaugccua”、“Uggaaugaaugua”,
“Caucaaagcggugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugucaaagcagcagcuugugugugugugugugugugugug,
“aggcagugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugugug
max_len=max(len(x)表示lst中的x)#最长字符串的长度
new_lst=[''。如果i
您可以使用itertools.zip\u
:
import itertools
[''.join(chars) for chars in itertools.zip_longest(*lst,fillvalue = '')]
输出:
['UCUACUCUAA', 'GUCCAGAAGC', 'AACAUGUUGG', 'GUCCAACCCG', 'GGUCCAAAAC', 'UCGUUUACGU', 'AAAGUGAAUA', 'GAGGCUGGGC', 'UUAGCACCUC', 'AUCCUAGCGU', 'GUCUUAGAGU', 'GUUCAGUGUC', 'UCCUCAGCUA', 'UUACAAGUAC', 'GAACUGUUGU', 'UCGGGUUUCG', 'ACUGCAGGUC', 'UUGGCUAAGC', 'AUUUCGUUGA', 'GAGAAUGGUC', 'UCACUAUUUC', 'UCCAGGGC', 'C']
Python 3中内置的zip()
和itertools
方法zip_longest()
(或者,在Python 2中,itertools
方法izip()
和izip_longest()
)是处理两个或多个iterables(例如列表、字符串或生成器)时的首选工具同时。要查看<代码> ZIP()> <代码> >代码> > ZIPLangEnter()>代码>:请考虑以下内容:
for chars in zip('ABCD','EFG','HI'):
print(chars)
print('')
for chars in itertools.zip_longest('ABCD','EFG','HI',fillvalue = ''):
print(chars)
输出:
('A', 'E', 'H')
('B', 'F', 'I')
('A', 'E', 'H')
('B', 'F', 'I')
('C', 'G', '')
('D', '', '')
生成的第一个元组是第一个元素的元组,生成的第二个元组是第二个元素的元组,以此类推。zip
(或izip
)在第一个iterable用完后立即停止。在这种情况下,它不能返回每个字符串中第三个字符的元组,因为zip
的第三个输入缺少第三个字符zip_longest()
(或izip_longest()
)允许一个fillvalue在较短的iterable中替换缺失的项,一旦它们被删除。这里我使用了空字符串,因为当元组被'
连接时,空字符串就消失了
在上面的代码中,我将3个字符串硬连接到zip\u longest()
。对于您的问题,您必须显式地输入10个输入,这在极端情况下会很繁琐,或者使用解包操作符*
。如果我有一份清单:
strings = ['ABCD','EFG', 'HI']
然后
相当于
该死。打败我@juanpa.arrivillaga有时Python非常容易,几乎看起来像是作弊。当我需要使用其他语言时,这是一个问题,我的大脑立即会想到“好吧,在Python中,我可以只使用
itertools
和…”非常感谢。约翰,你能解释一下你命令中的每一部分是做什么的吗。我知道外方括号表示它是一个列表“”。join(chars)表示我们通过“”将chars中的所有元素连接起来。但我不太清楚“for chars in itertools.zip_longest(*lst,fillvalue='')的作用是什么。我问这个只是为了我自己的学习经验。同样在itertools.zip中也不适合我。它显示了一个错误,但是itertools.izip在Python 2中工作itertools.zip_longest()
是itertools.izip_longest()
。您确实想要最长的
部分。谢谢您Yevhen:)
strings = ['ABCD','EFG', 'HI']
for char in itertools.zip_longest(*strings, fillvalue = ''):
for chars in itertools.zip_longest('ABCD','EFG','HI',fillvalue = ''):