我有一個輸入字串,每個元素都有一個數字和字符,我想分別訪問每個元素編號和字符,如下所示:
1s-2r,3d*3 # this is the line in the input file: # this stars means repeated three time
所以我想讓一個陣列只包含數字:
number_only=[1,2,3,3,3] # numpy
s=[s,r,d,d,d] # another array string characters only
但是我得到了以下錯誤“TypeError:不能用'str'型別的非整數乘以序列”..我知道這應該是一個整數,但我不知道該怎么做,附上試用代碼
import numpy as np
with open('dataa.dat', 'r') as f:
input_data = f.readlines()
input_data = [(d ' ')[:d.find('#')].rstrip() for d in input_data]
x = input_data[0].split('-')
y = []
for elt in x:
if "*" in elt:
n, mult = elt.split("*")
y = y [(n)] * (mult)
else:
y =[ii for ii in elt.split(',')]
number_only = np.array(y)
#s
uj5u.com熱心網友回復:
這將回傳字串中的數字:
only_digits = ''.join(i for i in string if i.isdigit())
uj5u.com熱心網友回復:
執行此操作的簡單方法是使用正則運算式:
import re
string = "1s-2r,3d*3"
numbers = re.findall(r"[0-9]", string)
letters = re.findall(r"[a-zA-Z]", string)
然后將數字從 str 轉換為 int:
numbers = [int(i) for i in numbers]
編輯:
這應該做
def parse_string_to_numbers_letters(string):
string_parts = re.split(r",|-", str(test))
aggregated_string = ""
for string in string_parts:
if re.search("\*", string):
to_be_multipled = string.split("*")[0]
multiplier = string.split("*")[1]
string = to_be_multipled * int(multiplier)
aggregated_string =string
numbers = re.findall(r"[0-9]", aggregated_string)
letters = re.findall(r"[a-zA-Z]", aggregated_string)
return numbers, letters
uj5u.com熱心網友回復:
你可以試試這個:
import re
def split_string(pat):
numbers = []
letters = []
for s in re.split(r"[,-]", pat):
count = 1
if len(s) > 2:
assert s[2] == '*'
count = int(s[3:])
numbers = [int(s[0])] * (count)
letters = [s[1]] * (count)
return numbers, letters
def main():
# The two examples from the question and the comments
numbers, letters = split_string("1s-2r,3d*3")
assert numbers == [1,2,3,3,3]
assert letters == ['s','r','d','d','d']
numbers, letters = split_string("1s,2e*3-2q*2,1u")
assert numbers == [1,2,2,2,2,2,1]
assert letters == ['s', 'e', 'e', 'e', 'q', 'q', 'u']
if __name__ == '__main__':
main()
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/381637.html
上一篇:撰寫一個名為get_numerals的函式,它從字串中回傳一個數字串列
下一篇:基于模式C#提取字串的一部分
