हैलो मेरे पास एक तार है जैसे:

liste_to_split=['NW_011625257.1_0','scaffold1_3','scaffold3']

और मैं उन्हें Number_Number पर विभाजित करना चाहूंगा मैंने कोशिश की :

for i in liste_to_split:
 i.split(r'(?<=[0-9])_')

और मुझे मिल गया

['NW_011625257.1_0']
['scaffold1_3']
['scaffold3']

की बजाय

['NW_011625257.1'] ['0']
['scaffold1'] ['3']
['scaffold3']

क्या कोई जानता है कि मुद्दा कहां है?

-1
chippycentra 28 अक्टूबर 2020, 13:23

2 जवाब

सबसे बढ़िया उत्तर

आप इस्तेमाल कर सकते हैं:

>>> import re
>>> liste_to_split=['NW_011625257.1_0','scaffold1_3','scaffold3']
>>> 
>>> for i in liste_to_split:
...     re.split(r'(?<=[0-9])_', i)
...
['NW_011625257.1', '0']
['scaffold1', '3']
['scaffold3']

string.split के बजाय re.split के उपयोग पर ध्यान दें और यह सुनिश्चित करने के लिए _ का उपयोग करें कि हम शून्य चौड़ाई वाले मैच पर विभाजित नहीं हो रहे हैं।


ओपी की टिप्पणी के आधार पर ऐसा लगता है कि ओपी इस विभाजन को dataframe कॉलम के लिए करना चाहता है। उस मामले में उपयोग करें:

मान लें कि यह आपका डेटाफ्रेम है:

>>> print (df)
             column
0  NW_011625257.1_0
1       scaffold1_3
2         scaffold3

तब आप उपयोग कर सकते हैं:

>>> print (df['column'].str.split(r'(?<=[0-9])_', expand=True))
                0     1
0  NW_011625257.1     0
1       scaffold1     3
2       scaffold3  None
2
anubhava 28 अक्टूबर 2020, 13:44
l=['NW_011625257.1_0','scaffold1_3','scaffold3']

for i in l:
  f = i.split('_')
  print(f) 

उत्पादन

['NW', '011625257.1', '0']
['scaffold1', '3']
['scaffold3']
1
user13824946user13824946 28 अक्टूबर 2020, 13:39