如何在列表中附加以字母python开头的项目

时间:2019-06-24 11:01:41

标签: python

在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']]

3 个答案:

答案 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'开头并中断内部循环。如果lastTrue,它将附加后续列表中的所有项目。

答案 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,基于预期的输出,以字母开头的子列表元素,有时单独使用,有时使用整个子列表,并在子列表中任意串联成单个字符串。