在python 3中找到以字母开头的子列表吗? 如何在列表中附加以字母python开头的项目
import re
code_result = [['1', 'abc_123', '0.40','7.55'], ['paragraph', '100', 'ML MY'],
['2','abc_456', '0.99'], ['letters and words','end','99']]
index_list = []
sub_list = []
for i in range(0,len(code_result)):
if code_result[i][0].isalpha():
index_list.append([i,i-1])
for item in range(0,len(index_list)):
temp = re.sub('[^0-9a-zA-Z]','',str(code_result[index_list[item][0]]))
sub_list.append([code_result[index_list[item][1]][1]+" "+temp])
print(sub_list)
我的代码仅可用于子列表中的一个字母,且不超过
Expected Output:
[['abc_123 paragraph 100 MLMY'],['abc_456 letters and words end 99']]
答案 0 :(得分:0)
这将以最小的更改满足您的需求
import re
code_result = [['1', 'abc_123', '0.40','7.55'], ['paragraph', '100', 'ML MY'], ['2','abc_456', '0.99'], ['letters and words','end','99']]
index_list = []
sub_list = []
for i in range(0,len(code_result)):
if code_result[i][0][0].isalpha():
index_list.append([i,i-1])
for item in range(0,len(index_list)):
temp = re.sub('[^0-9a-zA-Z ]','',str(code_result[index_list[item][0]]))
sub_list.append([code_result[index_list[item][1]][1]+" "+temp])
print(sub_list)
但是我仍然不清楚您要做什么,并且认为无论如何它都可以做得更好。
答案 1 :(得分:0)
这是另一种解决方案,使用内置的startswith
方法(请参阅documentation),最终获得所需的输出。
import re
code_result = [['1', 'abc_123', '0.40','7.55'], ['paragraph', '100', 'ML MY'], ['2','abc_456', '0.99'], ['letters and words','end','99']]
l1 = []
l2 = []
last = False
for x in code_result:
if last:
for y in range(len(x)):
l1.append(x[y])
if y == len(x)-1:
l2.append([' '.join(l1)])
l1 = []
last = False
else:
for y in x:
a = re.search('^[a-zA-Z]', y)
if a:
l1.append(y)
last = True
break
print(l2)
此代码遍历列表列表,检查列表中的项是否以'abc'开头并中断内部循环。如果last
是True
,它将附加后续列表中的所有项目。
答案 2 :(得分:0)
由于只有字母具有大小写差异,因此可以将其用作条件。整个过程可以包含在一个列表理解中:
sub_list = [[s for s in a if s[0].lower()!=s[0].upper()] for a in code_result]
# [['abc_123'], ['paragraph', 'ML MY'], ['abc_456'], ['letters and words', 'end']]
请注意,您的问题陈述和预期输出不明确。他们也可能意味着:
以仅包含字母(基于问题标题)的项目开头的子列表:
[ a for a in code_result if a[0].lower()!=a[0].upper()]
# [['paragraph', '100', 'ML MY'], ['letters and words', 'end', '99']]
OR,基于预期的输出,以字母开头的子列表元素,有时单独使用,有时使用整个子列表,并在子列表中任意串联成单个字符串。