簡體   English   中英

如何將Python列表中的后續數字連接成雙(或更多)數字

[英]How to join subsequent digits in a Python list into a double (or more) digit number

我有以下字符串:

string = 'TAA15=ATT'

我列出了一個清單:

string_list = list(string)
print(string_list)

結果是:

['T', 'A', 'A', '1', '5','=', 'A', 'T', 'T']

我需要檢測后續數字並將它們連接成一個數字,如下所示:

['T', 'A', 'A', '15','=', 'A', 'T', 'T']

我也很關心表演。 這個字符串轉換完成了一千次。

感謝您提供的任何提示。

這是一個非常簡短的解決方案

import re

def digitsMerger(source):
    return re.findall(r'\d+|.', source)
digitsMerger('TAA15=ATT')
['T', 'A', 'A', '15', '=', 'A', 'T', 'T']

使用itertools.groupby

例如:

from itertools import groupby
string = 'TAA15=ATT'

result = []
for k, v in groupby(string, str.isdigit):
    if k:
        result.append("".join(v))
    else:
        result.extend(v)
print(result)

輸出:

['T', 'A', 'A', '15', '=', 'A', 'T', 'T']

另一個正則表達式:

import re

s = 'TAA15=ATT'

pattern = r'\d+|\D'

m = re.findall(pattern, s)

print(m)

你可以在Python中使用正則表達式re

import re
string = 'TAA15=ATT'
num = re.sub('[^0-9,]', "", string)
pos = string.find(num)
str2 = re.sub('\\d+',"", string)
str2 = re.sub('=',"", str2)
print(str2)
l = list()
for el in str2:
    l.append(el)
l.insert(pos, num)
print(l)

基本上re.sub('[^0-9,]', "", string)告訴:取字符串,匹配所有不是( ^表示否定)數字( 0-9 )的字符並用它們替換它們第二個參數,即一個空字符串。 所以基本上剩下的只是你必須轉換為整數的數字。

如果=總是在數字之后而不是

str2 = re.sub('\\d+',"", string)
str2 = re.sub('=',"", str2)

你可以做

str2 = re.sub('\\d+=',"", string)

您可以創建一個比較上次看到的值和下一個值的函數,並使用functools.reduce

from functools import reduce

string_list = ['T', 'A', 'A', '1', '5', 'A', 'T', 'T']

def combine_nums(lst, nxt):
    if lst and all(map(str.isdigit, (lst[-1], nxt))):
        nxt = lst[-1] + nxt
    return lst + [nxt]

print(reduce(combine_nums, string_list, [])

結果:

['T', 'A', 'A', '1', '15', 'A', 'T', 'T']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM