python 成语库_Python“Every Other Element”成语

本问题已经有最佳答案,请猛点这里访问。

我觉得我花了很多时间在Python中编写代码,但没有足够的时间创建Pythonic代码。 最近我遇到了一个有趣的小问题,我认为可能有一个简单,惯用的解决方案。 解释原文,我需要收集列表中的每个连续对。 例如,给定列表[1,2,3,4,5,6],我想计算[(1,2),(3,4),(5,6)]。

我想出了一个看起来像翻译Java的快速解决方案。 重温这个问题,我能做的最好的就是

l = [1,2,3,4,5,6]

[(l[2*x],l[2*x+1]) for x in range(len(l)/2)]

在长度不均匀的情况下,其具有抛弃最后一个数字的副作用。

是否有一种我不知道的惯用方法,或者这是我最好的方法?

相关的"什么是最"pythonic"以块的形式迭代列表?"stackoverflow.com/questions/434287/

这样做会更整齐:

>>> data = [1,2,3,4,5,6]

>>> zip(data[0::2], data[1::2])

[(1, 2), (3, 4), (5, 6)]

(但如果你不熟悉范围的"跨步"特征,它可以说可读性较差)。

与您的代码一样,它会丢弃您具有奇数个值的最后一个值。

在执行上述操作之前,您可以执行data += [None]来处理奇数项目方案。

some_list += [foo]写为some_list.append(foo)。

这次迭代数据多少次?看看这个答案

经常被引用的是:

zip(*[iter(l)] * 2)

我更喜欢iter解决方案的更易读的版本:

it = iter(l)

list(zip(it, it))

# [(1, 2), (3, 4), (5, 6)]

太棒了,但读起来像perl ;-)

没错,但我认为这也是迄今为止提出的最有效的解决方案。我会测试,brb。

是的,它比RichieHindle的解决方案快10%左右,因为它不需要任何内存分配,只需要在输入列表上进行一次迭代。

+1因为我以前从未知道*解包参数列表!

这是一种灵活的方法,但显然不太可读,特别是对于不太高级的Python开发人员。这就是为什么我喜欢用grouper来抽象它的作用。

知道,虽然RichieHindle赢得了接受的答案(真的很难忽视可读性),但这个答案赢得了我的心。

值得注意的是,这直接来自Python文档。

我通常将itertools文档中的grouper配方复制到我的代码中。

def grouper(n, iterable, fillvalue=None):

"grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"

args = [iter(iterable)] * n

return izip_longest(fillvalue=fillvalue, *args)

如何使用range()的步骤功能:

[(l[n],l[n+1]) for n in range(0,len(l),2)]

toolz是一个精心构建的库,在itertools中忽略了许多功能编程细节。 partition解决了这个问题(可以选择填充奇数长度列表的最后一个条目)

>>> list(toolz.partition(2, [1,2,3,4,5,6]))

[(1, 2), (3, 4), (5, 6)]

正确的事情可能不是计算列表,而是编写迭代器 - >迭代器函数。这是更通用的 - 它适用于每个可迭代的,如果你想将它"冻结"到一个列表中,你可以使用"list()"函数。

def groupElements(iterable, n):

# For your case, you can hardcode n=2, but I wanted the general case here.

# Also, you do not specify what to do if the

# length of the list is not divisible by 2

# I chose here to drop such elements

source = iter(iterable)

while True:

l = []

for i in range(n):

l.append(source.next())

yield tuple(l)

我很惊讶itertools模块还没有这个功能 - 也许是未来的版本。在此之前,随意使用上面的版本:)

这与性能有什么关系?

试试这个

def pairs(l, n):

return zip(*[l[i::n] for i in range(n)])

所以,

pairs([1, 2, 3, 4], 2)

[(1, 2), (3, 4)]

如果您不希望丢失元素,如果列表中的数字不是,请尝试这样:

>>> l = [1, 2, 3, 4, 5]

>>> [(l[i],  l[i+1] if i+1 < len(l) else None)  for i in range(0, len(l), 2)]

[(1, 2), (3, 4), (5, None)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: find_elementPython中Selenium中的一个方法,用于在网页中查找元素。它可以根据元素的id、name、class name、tag name、link text、partial link text、xpath和css selector等属性进行查找。使用方法如下: 1. 导入Selenium ```python from selenium import webdriver ``` 2. 创建浏览器对象 ```python browser = webdriver.Chrome() ``` 3. 打开网页 ```python browser.get('http://www.example.com') ``` 4. 查找元素 ```python element = browser.find_element_by_id('element_id') ``` 其中,'element_id'是要查找的元素的id属性值。还可以使用其他属性值进行查找,例如: ```python element = browser.find_element_by_name('element_name') element = browser.find_element_by_class_name('element_class') element = browser.find_element_by_tag_name('element_tag') element = browser.find_element_by_link_text('element_link_text') element = browser.find_element_by_partial_link_text('element_partial_link_text') element = browser.find_element_by_xpath('element_xpath') element = browser.find_element_by_css_selector('element_css_selector') ``` 5. 对元素进行操作 ```python element.click() # 点击元素 element.send_keys('input_text') # 输入文本 ``` 6. 关闭浏览器 ```python browser.quit() ``` ### 回答2: Python中的find_element()是一种处理Web编程中的元素定位和获取的方法。它是Selenium中的一个重要函数,用于寻找和获取网页中的元素,并返回该元素的地址。 find_element()方法可与WebDriver共同使用,是Python编写Selenium自动化测试用例中的必备方法之一,表示查找页面元素的关键词。 find_element()方法的语法为: ``` find_element(by=’str1’, value=’str2’) ``` 其中,by表示查找的方式,常用的有xpath、id、css selector、name、tag name和link text等。value表示查找对应的值。 例如,假设我们要通过id查找一个元素,可以写出下面的代码: ``` from selenium import webdriver browser = webdriver.Chrome() browser.get('https://www.baidu.com') element = browser.find_element(by='id', value='kw') print(element) browser.quit() ``` 在这段代码中,我们先打开了百度的页面,然后通过id为kw的元素,用find_element()方法找到了对应的元素,最后输出该元素的地址。该代码本质上执行了以下三个步骤: 1. 初始化webdriver浏览器 2. 打开指定的百度页面 3. 查找对应的id为kw的元素 当然,find_element()方法并不是只能用来查找单个元素,还可以查找多个元素,在这里就不一一细讲了。 总的来说,find_element()方法在Python的Selenium中是非常重要的一个方法,它可以帮助我们通过不同的方式定位页面中的元素,并获取它们的属性、文本、值等信息。需要注意的是,在使用该方法时需要注意查找方式和对应的元素值的正确性。 ### 回答3: Python中的find_element是一种用于定位和获取网页中元素的方法,一般用于自动化测试或网页爬虫等场景中。下面将从以下几个方面详细介绍find_element的用法。 1. find_element的语法 find_element的语法比较简单,一般为: ``` find_element(by='id', value=None) ``` 其中,by指定定位方式,value指定定位元素的值。常用的by方式有: - id:根据元素的id属性定位 - name:根据元素的name属性定位 - class_name:根据元素的class属性定位 - tag_name:根据元素的标签名定位 - link_text:根据元素的链接文本定位 - partial_link_text:根据元素的链接文本的部分内容定位 - xpath:根据元素的xpath路径定位 - css_selector:根据元素的CSS选择器定位 2. 通过id或name定位元素 如果想通过元素的id或name属性来定位元素,可以使用以下方式: ``` # 根据id定位 element = driver.find_element_by_id('element_id') # 根据name定位 element = driver.find_element_by_name('element_name') ``` 注意:id和name属性值必须唯一,否则只能获取到第一个匹配的元素。 3. 通过class定位元素 如果想通过元素的class属性来定位元素,可以使用以下方式: ``` element = driver.find_element_by_class_name('element_class') ``` 如果一个页面中有多个class名相同的元素,只能获取到第一个匹配的元素。 4. 通过标签名定位元素 如果想通过标签名来定位元素,可以使用以下方式: ``` element = driver.find_element_by_tag_name('div') ``` 如果一个页面中有多个相同标签名的元素,只能获取到第一个匹配的元素。 5. 通过链接文本或部分链接文本定位元素 如果想通过元素的链接文本或部分链接文本来定位元素,可以使用以下方式: ``` # 根据链接文本定位(链接文本必须完全匹配) element = driver.find_element_by_link_text('链接文本') # 根据部分链接文本定位 element = driver.find_element_by_partial_link_text('部分链接文本') ``` 6. 通过xpath或CSS选择器定位元素 如果想通过元素的xpath路径或CSS选择器来定位元素,可以使用以下方式: ``` # 根据xpath路径定位 element = driver.find_element_by_xpath('xpath路径') # 根据CSS选择器定位 element = driver.find_element_by_css_selector('CSS选择器') ``` xpath路径和CSS选择器的语法太复杂,需要单独学习。 7. 执行操作 通过find_element方法获取到元素后,可以对该元素执行各种操作,例如: ``` # 点击元素 element.click() # 输入内容 element.send_keys('内容') # 获取元素属性值 element.get_attribute('属性名') # 获取元素文本 element.text ``` 8. find_elements方法的用法 除了find_element方法外,还有find_elements方法,它和find_element用法差不多,只是可以获取到所有匹配的元素,例如: ``` elements = driver.find_elements_by_class_name('element_class') ``` 最后需要注意的是,find_element方法只能获取到第一个匹配的元素,如果想获取到所有匹配的元素,需要使用find_elements方法。此外,如果定位不到元素,find_element会抛出NoSuchElementException异常,因此一定要在代码中加入异常处理机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值