将 Python 列表拆分为两个列表

Split a Python List into two lists

我正在使用的代码:

  def METRICS():
  if os.path.exists("C:\Users\byrcharl\Desktop\PYTHON\TEST\DATA\data.csv"):
    os.remove("C:\Users\byrcharl\Desktop\PYTHON\TEST\DATA\data.csv")
  link = "https://grafana-prod.prod.us-east-1.grafana.insights.aft.amazon.dev/d/23b3a69d/smartpac?orgId=1&var-building=FAT1&var-workCellId=All&var-process=SmartPac"
  options = webdriver.ChromeOptions()
  options.add_argument("--headless")
  options.add_argument("--window-size=1920,1080")
  prefs = {'download.default_directory' : 'C:\Users\byrcharl\Desktop\PYTHON\TEST\DATA'}
  options.add_experimental_option('prefs', prefs)
  driver = webdriver.Chrome(options=options)
  driver.get(link)
  sleep(10)
  all_avg = driver.find_elements_by_xpath('//*[@id="panel-4"]/div/div[1]/div/div[2]/div/plugin-component/panel-plugin-graph/grafana-panel/ng-transclude/div/div[2]/div/div[1]/div')
  lst = []
  for avg in all_avg:
      #print(avg.text)
      lst.append(avg.text)
  #print(lst)
  list = [x.replace('\n',',')for x in lst]
  
  print (list)

输出:

['801,100.0%,802,78.3%,803,99.8%,804,18.5%,805,99.9%,811,100.0%,812,99.9%,813,97.9%,814,99.8%,815,99.9%,816,98.5%,817,100.0%,818,69.9%,819,100.0%,820,100.0%,821,95.9%,822,100.0%,823,100.0%']

我需要将第一组数字(即 801 802 803 等)放在一个列表中,并将百分比百分比放在另一个列表中 .这样我就可以正确地格式化为 DF。

期望的输出:

list_1 = ['801',802',803',804', etc ]
list_2 = ['100%',78.3%,'99.8%','18.5%', etc ]

我使用 pandasDF 和制表后的最终输出:

| Placehol     | 701   | 702   | 703   | 704   | 705   | 706   | 707   | 708   | 709    | 710    | 711   | 712   | 713   |
|:-------------|:------|:------|:------|:------|:------|:------|:------|:------|:-------|:-------|:------|:------|:------|
| Availability | 99.1% | 98.5% | 67.0% | 87.0% | 98.3% | 98.0% | 96.9% | 99.1% | 100.0% | 100.0% | 95.9% | 98.1% | 98.1% |

您可以使用 Python 列表切片:https://www.geeksforgeeks.org/python-list-slicing/

lst = [x.replace('\n',',') for x in lst] # ['801,100.0%,802,78.3%,803...']

# convert to a list of strings
result = lst.join(",").split(",") # ['801','100.0%','802','78.3%','803',...]

# start from the first element, add every 2n + 1 element to result_1
result_1 = result[::2]

# start from the second element, add every 2n element to result_2
result_2 = result[1::2]

嗯,我没注意到你的 list 只有一个元素。编辑了我的代码示例。

除了Vlad提供的解决方案,您还可以使用正则表达式模块解决您的问题。

我想使用的正则表达式模式是 (,|^)((\d+)(\.\d+)?)(,|$),它选择不带百分号的数字,另一个是 (,|^)((\d+)(\.\d+)?%)(,|$),它选择带百分号的数字。

我不确定什么是一个字符串的列表,但是既然你使用了一个列表,我将根据你的输出给你一个答案:

import re
myList = ['801,100.0%,802,78.3%,803,99.8%,804,18.5%,805,99.9%,811,100.0%,812,99.9%,813,97.9%,814,99.8%,815,99.9%,816,98.5%,817,100.0%,818,69.9%,819,100.0%,820,100.0%,821,95.9%,822,100.0%,823,100.0%']

list_1 = []
list_2 = []
for string in myList:
  temp = re.compile("(,|^)((\d+)(\.\d+)?)(,|$)").findall(string)
  list_1 += [x[1] for x in temp]
  temp = re.compile("(,|^)((\d+)(\.\d+)?%)(,|$)").findall(string)
  list_2 += [x[1] for x in temp]
print(list_1)
print(list_2)

输出

['801', '802', '803', '804', '805', '811', '812', '813', '814', '815', '816', '817', '818', '819', '820', '821', '822', '823']
['100.0%', '78.3%', '99.8%', '18.5%', '99.9%', '100.0%', '99.9%', '97.9%', '99.8%', '99.9%', '98.5%', '100.0%', '69.9%', '100.0%', '100.0%', '95.9%', '100.0%', '100.0%']