在特定字符串后获取多个数字

时间:2015-02-11 18:39:42

标签: python arrays list numbers integer

我在RND'之后从列表中获取数字时遇到问题:

myList = [['1123-TDT', '10593917/5422', 'RND', '20.5', 'QWTQWGSAG', 'RND', '40'],
          ['1156-TDT', '51205915/6166', 'ASDWT', '111551', 'RND', '35']]

如果列表项中只有一个RND(myList [1]),我可以在RND之后得到数字。但如果有两个' em(myList [0]),则没有任何反应。

我的例子:

myList = [['1123-TDT', '10593917/5422', 'RND', '20.5', 'QWTQWGSAG', 'RND', '40'],
          ['1156-TDT', '51205915/6166', 'ASDWT', '111551', 'RND', '35']]

listLen = len(myList)

for x in range(listLen):
    if 'RND' in myList[x]:
        y = myList[x].index('RND')
        z = myList[x][y+1]
        print(z)

输出看起来像这样:

20.5
35

但我希望如此:

20.5 40
35

提前致谢!

2 个答案:

答案 0 :(得分:2)

如果当前元素等于"RND",则需要访问子列表中的每个子列表和每个子元素,然后在当前元素之后的索引处获取元素:

print( [sub[ind] for sub in myList for ind, ele in enumerate(sub,1) if ele == "RND"])
['20.5', '40', '35']

使用两个普通循环:

# iterate over each sublist
for sub in myList: 
    # check every element in each sublist for "RND"
    # if we find a match print the next element in the list
    for ind, ele in enumerate(sub,1):
        if ele == "RND":
            print(sub[ind])

我们使用enumerate(sub,1),其中1是起始索引,因此当我们访问sub[ind]时,如果我们使用0的起始索引,我们将获得下一个元素而不是当前元素。

y = myList[x].index('RND')只会获得第一次次。

如果您希望每个子列表在单行上打印输出,请使用end=" "

for sub in myList:
    # check every element in each sublist for "RND"
    # if we find a match print the next element in the list
    for ind, ele in enumerate(sub,1):
        if ele == "RND":
            print(sub[ind],end=" ")
    print()
20.5 40 
35 

答案 1 :(得分:1)

您需要遍历列表中的相应列表,以使用您的方法完成此操作。

也许尝试遍历每个列表的列表元素,检查列表元素是否等于RND,并打印当前正在执行的以下索引值。
< br />您必须进行的唯一更改是遍历列表元素并使用条件语句查找RND,而不是仅使用list.index来确定RND的索引。这对你来说是一个很好的练习。