Выбор подходящих строк списка с помощью индексации

#python #indexing #line

#python #индексирование #строка

Вопрос:

Я хочу извлечь строки из списка, содержащие атомы углерода (‘C’).

Фактические строки:

 propene_data = ['H        -0.08677109049370    0.00000005322169    0.02324774260533n', 'C        -0.02236345244409   -0.00000001742911    1.09944502076327n', 'C         1.14150994274008    0.00000000299501    1.72300489107368n', 'H        -0.95761218150040   -0.00000002374717    1.63257861279343n', 'H         1.17043966864771    0.00000000845005    2.80466760537188n', 'C         2.46626448549704   -0.00000000616665    1.02315746104893n', 'H         3.28540550052797    0.00000001315434    1.73628424885091n', 'H         2.55984407099540   -0.87855375749407    0.38655722260408n', 'H         2.55984405602998    0.87855372701591    0.38655719488850n']
  

Я попытался извлечь строку углерода, используя следующее решение;

 car1 = propene_data[1].split()
car2 = propene_data[2].split()
car3 = propene_data[5].split()

propene_carbons = car1   car2   car3
  

Это решение дает;

 propene_carbons = ['C', '-0.02236345244409', '-0.00000001742911', '1.09944502076327', 'C', '1.14150994274008', '0.00000000299501', '1.72300489107368', 'C', '2.46626448549704', '-0.00000000616665', '1.02315746104893']
  

Это дает то, что я хочу, но я хотел бы знать, могу ли я вместо этого индексировать (на случай, если список намного длиннее). Как мне использовать индексацию в этом случае?

Комментарии:

1. Вы хотите извлекать числа только из строк, которые начинаются с C ?

2. Да, я хочу извлекать строки, начинающиеся с ‘C’, используя индексацию, если это возможно.

Ответ №1:

Что вам нужно здесь startswith :

 result = text.startswith('C')
  

в цикле:

 result = [i for i in propene_data if i.startswith('C')]
  

Вывод:

 ['C        -0.02236345244409   -0.00000001742911    1.09944502076327n', 
'C         1.14150994274008    0.00000000299501    1.72300489107368n', 
'C         2.46626448549704   -0.00000000616665    1.02315746104893n']
  

Комментарии:

1. Я не считаю, что это правильно, потому что он не предоставляет индексированную сумму чисел, а просто добавляет их все в список.

Ответ №2:

вы можете использовать это :

 propene_array=np.array([i.split() for i in propene_data])
sub_array=np.where(propene_array[:,0]=='C')[0]
propene_carbon=[]
for i in sub_array :
  propene_carbon =list(propene_array[i])
  

вывод :

 ['C', '-0.02236345244409', '-0.00000001742911', '1.09944502076327', 'C', 
 '1.14150994274008', '0.00000000299501', '1.72300489107368', 'C', 
'2.46626448549704', '-0.00000000616665', '1.02315746104893']
  

Комментарии:

1. спасибо за помощь, но я не собираюсь разделять все данные в строке. я должен извлечь целые строки, в которых есть углерод (‘C’).