所以,这是我正在尝试的功能的一部分.
我不希望代码太复杂.
我有一个单词列表,例如
words = ['giraffe', 'elephant', 'ant', 'tiger', 'racoon', 'cat', 'hedgehog', 'mouse']
Run Code Online (Sandbox Code Playgroud)
单词链序列的概念是下一个单词以最后一个单词结尾的字母开头.
(编辑:每个单词不能多次使用.除此之外没有其他限制.)
我希望输出给出最长的单词链序列,在这种情况下是:
['hedgehog', 'giraffe', 'elephant', 'tiger', 'racoon']
Run Code Online (Sandbox Code Playgroud)
我不确定该怎么做,我尝试过不同的尝试.其中一个......
如果我们从列表中的特定单词开始,此代码正确地找到单词链,例如单词[0](所以'giraffe'):
words = ['giraffe', 'elephant', 'ant', 'tiger', 'racoon', 'cat', 'hedgehog', 'mouse']
word_chain = []
word_chain.append(words[0])
for word in words:
for char in word[0]:
if char == word_chain[-1][-1]:
word_chain.append(word)
print(word_chain)
Run Code Online (Sandbox Code Playgroud)
输出:
['giraffe', 'elephant', 'tiger', 'racoon']
Run Code Online (Sandbox Code Playgroud)
但是,我想找到最长的单词链(如上所述).
我的方法:所以,我尝试使用我编写和循环的上述工作代码,使用列表中的每个单词作为起点,找到每个单词[0],单词[1],单词[2]的单词链然后我尝试通过使用if语句找到最长的单词链,并将长度与前一个最长的链进行比较,但我无法正确完成它,我真的不知道这是怎么回事.
words = ['giraffe', 'elephant', 'ant', 'tiger', 'racoon', 'cat', 'hedgehog', 'mouse']
word_chain = []
max_length = 0
for starting_word_index in range(len(words) - …Run Code Online (Sandbox Code Playgroud) 我几乎不知道OOP术语和概念.我从概念上知道对象是什么,对象有方法.我甚至明白在python中,类是对象!那很酷,我只是不知道它意味着什么.它没有点击我.
我目前正在尝试理解一些我认为将阐明我对python的理解的详细答案:
在第一个答案中,作者使用以下代码作为示例:
>>> class Bank(): # let's create a bank, building ATMs
... crisis = False
... def create_atm(self) :
... while not self.crisis :
... yield "$100"
Run Code Online (Sandbox Code Playgroud)
我不会立即弄清楚self指向的是什么.这绝对是不理解类的一个症状,我将在某些时候开展工作.澄清,在
>>> def func():
... for i in range(3):
... print i
Run Code Online (Sandbox Code Playgroud)
我理解i指向列表中的项目range(3),因为它在函数中,不是全局的.但是什么self"指向"?
作为一个完整的Python新手,它肯定是这样的.运行以下...
x = enumerate(['fee', 'fie', 'foe'])
x.next()
# Out[1]: (0, 'fee')
list(x)
# Out[2]: [(1, 'fie'), (2, 'foe')]
list(x)
# Out[3]: []
Run Code Online (Sandbox Code Playgroud)
......我注意到:(a)x确实有一个next方法,似乎是生成器所需要的,而(b)x只能迭代一次,这个着名的python标签答案中强调了生成器的一个特征.
在另一方面,这两个最高度upvoted回答这个问题,
如何确定一个对象是否是发电机似乎表明,enumerate()它不会返回发电机.
import types
import inspect
x = enumerate(['fee', 'fie', 'foe'])
isinstance(x, types.GeneratorType)
# Out[4]: False
inspect.isgenerator(x)
# Out[5]: False
Run Code Online (Sandbox Code Playgroud)
......虽然对该问题的第三个低调的回答似乎表明实际上enumerate() 确实返回了一个发电机:
def isgenerator(iterable):
return hasattr(iterable,'__iter__') and not hasattr(iterable,'__len__')
isgenerator(x)
# Out[8]: True
Run Code Online (Sandbox Code Playgroud)
发生什么了?是x发电机还是没有?它在某种意义上是"类似发电机",但不是真正的发电机吗?Python使用duck-typing是否意味着上面最后一个代码块中概述的测试实际上是最好的?
我不会继续写下我头脑中可能存在的可能性,而是将其抛给那些立即知道答案的人.
我看到很多生成器函数的例子,但我想知道如何为类编写生成器.可以说,我想把斐波纳契系列写成一个类.
class Fib:
def __init__(self):
self.a, self.b = 0, 1
def __next__(self):
yield self.a
self.a, self.b = self.b, self.a+self.b
f = Fib()
for i in range(3):
print(next(f))
Run Code Online (Sandbox Code Playgroud)
输出:
<generator object __next__ at 0x000000000A3E4F68>
<generator object __next__ at 0x000000000A3E4F68>
<generator object __next__ at 0x000000000A3E4F68>
Run Code Online (Sandbox Code Playgroud)
为什么self.a没有印刷价值?另外,我如何unittest为发电机写信?
我很熟悉屈服回报价值主要归功于这个问题
但是当它在作业的右侧时,屈服会做什么?
@coroutine
def protocol(target=None):
while True:
c = (yield)
def coroutine(func):
def start(*args,**kwargs):
cr = func(*args,**kwargs)
cr.next()
return cr
return start
Run Code Online (Sandbox Code Playgroud)
在研究状态机和协同程序时,我在本博客的代码示例中遇到了这个问题.
我知道怎么yield运作.我知道排列,认为它只是一个简单的数学.
但是什么yield是真正的力量?我应该什么时候使用它?一个简单而好的例子就更好了.
我一直试图通过Project Euler工作,并注意到一些问题要求你确定一个素数作为其中的一部分.
我知道我可以将x除以2,3,4,5,...,X的平方根,如果我到达平方根,我可以(安全地)假设该数字是素数.不幸的是,这个解决方案似乎非常笨重.
我已经研究了如何确定数字是否为素数的更好的算法,但是快速混淆.
是否有一个简单的算法可以确定X是否是素数,而不是混淆一个凡人的程序员?
非常感谢!
我正在使用以下内容从文本文件中读取一行:
file = urllib2.urlopen("http://192.168.100.17/test.txt").read().splitlines()
Run Code Online (Sandbox Code Playgroud)
并在telnetlib.write命令中将其输出到LCD显示器,宽度为16个字符.如果读取的行超过16个字符,我想将其分解为16个字符长的字符串的部分,并在一定延迟(例如10秒)后将每个部分推出,一旦完成,代码应移到下一行输入文件并继续.
我已经尝试过搜索各种解决方案并阅读itertools等等.但是我对Python的理解不足以让任何事情无法工作而不用很长时间的方式使用乱七八糟的if if else语句可能会去把我绑在一起!
对我来说,做我想做的最好的方法是什么?
我写了以下代码:
class FigureOut:
def setName(self, name):
fullname = name.split()
self.first_name = fullname[0]
self.last_name = fullname[1]
def getName(self):
return self.first_name, self.last_name
f = FigureOut()
f.setName("Allen Solly")
name = f.getName()
print (name)
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
('Allen', 'Solly')
Run Code Online (Sandbox Code Playgroud)
每当从python中的函数返回多个值时,它是否总是将多个值转换为多个值的列表,然后从函数返回它?
整个过程是否与将多个值转换为list显式然后返回列表相同,例如在JAVA中,因为只能从JAVA中的函数返回一个对象?
我知道这个问题已被多次覆盖,但我的要求是不同的.
我有一个列表:range(1, 26).我想把这个列表分成一个固定的数字n.假设n = 6.
>>> x
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
>>> l = [ x [i:i + 6] for i in range(0, len(x), 6) ]
>>> l
[[1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18], [19, 20, 21, 22, 23, 24], [25]]
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我没有获得6个块(六个子列表包含原始列表的元素).如何以这样的方式划分列表,使得我得到n …