簡體   English   中英

Python-將字母數字列表分成整數和字符串

[英]Python - Seperate alphanumeric list into integer and string

我正在嘗試處理包含如下數據的csv文件:

['193T','4234234234'],['30T','54353456346'],['203K','4234234234'],['19E','4234234234']

字母數字字符串應分為數字和單個字符,然后作為int()和字符串重新放回數組。 然后,第二步是將所有相同的字符聚類,然后按整數對它們進行排序。

最后是這樣的:

[19,'E',4234234234],[203,'K',4234234234],[30,'T',54353456346],[193,'T',4234234234]

希望您能理解其背后的想法。

預先非常感謝您的幫助。

l = [['193T','4234234234'],
     ['30T','54353456346'],
     ['203K','4234234234'],
     ['19E','4234234234']]

# Using a list comprehension
[[int(i[0][:-1]), i[0][-1], int(i[1])] for i in l]

輸出量

[[193, 'T', 4234234234],
 [30, 'T', 54353456346],
 [203, 'K', 4234234234],
 [19, 'E', 4234234234]]

然后,您可以使用第二個元素作為key進行排序。

sorted([[int(i[0][:-1]), i[0][-1], int(i[1])] for i in l], key = lambda x: x[1])

輸出量

[[19, 'E', 4234234234L],
 [203, 'K', 4234234234L],
 [193, 'T', 4234234234L],
 [30, 'T', 54353456346L]]

如果字母字符始終位於字符串的末尾,則可以使用以下命令:

>>> entries = (['193T','4234234234'],['30T','54353456346'],['203K','4234234234'],['19E','4234234234'])
>>> entries = tuple([int(entry[0][:-1]), entry[0][-1], entry[1]] for entry in entries)
>>> print entries
([193, 'T', '4234234234'], [30, 'T', '54353456346'], [203, 'K', '4234234234'], [19, 'E', '4234234234'])
import re
from operator import itemgetter
import pprint

# Pretty printer (for nice output)
pp = pprint.PrettyPrinter(indent=4)

# Test data
arr = [
['193T','4234234234'],['30T','54353456346'],['203K','4234234234'],['19E','4234234234']
]

for x in arr:
    # Regex search of string
    m = re.search("(?i)(\d+)([a-z])", x[0])
    if m:
        number = int(m.group(1))
        character = m.group(2)
        x.pop(0)
        x.insert(0, character)
        x.insert(0, number)

# Sort the results
result = sorted(sorted(arr, key=itemgetter(0)), key=itemgetter(1))

pp.pprint(result)

暫無
暫無

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

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