首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Python列表拆分为两个列表

将Python列表拆分为两个列表
EN

Stack Overflow用户
提问于 2022-03-23 20:52:50
回答 2查看 383关注 0票数 0

与我一起工作的代码:

代码语言:javascript
复制
  def METRICS():
  if os.path.exists(""):
    os.remove("")
  link = ""
  options = webdriver.ChromeOptions()
  options.add_argument("--headless")
  options.add_argument("--window-size=1920,1080")
  prefs = {'download.default_directory' : ''}
  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)

产出:

代码语言:javascript
复制
['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。

期望产出:

代码语言:javascript
复制
list_1 = ['801',802',803',804', etc ]
list_2 = ['100%',78.3%,'99.8%','18.5%', etc ]

使用pandasDF并编制表后的最终输出:

代码语言:javascript
复制
| 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% |
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-23 20:57:29

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

代码语言:javascript
复制
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只有一个元素。编辑了我的代码样本。

票数 2
EN

Stack Overflow用户

发布于 2022-03-23 21:05:59

除了Vlad提供的解决方案之外,您还可以使用regex模块解决问题。

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

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

代码语言:javascript
复制
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)

输出

代码语言:javascript
复制
['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%']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71593914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档