Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 错误的列表输出超出了预期_Python_List - Fatal编程技术网

Python 错误的列表输出超出了预期

Python 错误的列表输出超出了预期,python,list,Python,List,因此,我必须遍历这个列表,将偶数除以2,然后将赔率乘以3,但是当我将列表合并在一起打印时,它会给出[0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0]。我在循环中打印每个值,以检查它是否是算术错误,但它打印出正确的值。使用lambda我发现每次调用它时它都会重写数据,因此我试图找到其他方法来实现这一点,同时仍然使用map函数。代码的约束条件是需要使用map函数来完成。以下是代码片段: data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] da

因此,我必须遍历这个列表,将偶数除以2,然后将赔率乘以3,但是当我将列表合并在一起打印时,它会给出[0.5,1.0,1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0]。我在循环中打印每个值,以检查它是否是算术错误,但它打印出正确的值。使用
lambda
我发现每次调用它时它都会重写
数据
,因此我试图找到其他方法来实现这一点,同时仍然使用
map
函数。代码的约束条件是需要使用map函数来完成。以下是代码片段:

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data_list1 = []
i = 0
while i < len(data):
    if (data[i] % 2) == 0:
        data_list1 = list(map(lambda a: a / 2, data))
        print(data_list1[i])
        i += 1
    else:
        data_list1 = list(map(lambda a: a * 3, data))
        print(data_list1[i])
        i += 1
print(list(data_list1))1
data=[1,2,3,4,5,6,7,8,9,10]
数据列表1=[]
i=0
而i

编辑:错误已被修复。

从你最近的评论中,我完整地编辑了下面的答案(旧版本可以在这篇文章的编辑历史中找到)


从您的更新中,我看到您的限制是使用
map
。那么,让我们谈谈这是如何工作的:

map
是一个存在于许多语言中的函数,一开始看到它可能会感到惊讶,因为它将函数作为参数。一个类比可能是:你给一个工匠(映射功能)一块金属(值列表)和一个工具(传递到映射中的功能),然后你告诉他,在每一块金属上使用该工具,并将修改后的零件还给你

需要了解的一件非常重要的事情是,
map
获取一个完整的列表/iterable,然后返回一个新的iterable<代码>映射
负责循环,因此您不必这样做

  • 如果你递给他一把锤子作为工具,每一块金属上都会有一个凹痕
  • 如果你递给他一个划线器,每一块金属都会有划痕
  • 如果你递给他一个锻炉作为工具,每一块金属都会熔化
underand这里的核心是“map”将获取任何列表(或者更准确地说是一个“iterable”),并将您赋予它的任何函数应用于每个项,然后返回修改后的列表(同样,返回值实际上不是一个列表,而是一个新的“iterable”)

例如(使用字符串):

我没有认真回答你问题的核心,因为这是家庭作业,但我希望这篇文章能给你一个使用
map
的实际例子,这有助于练习

另一个更实用的示例是将数据保存到磁盘 上面的例子是故意设计的,以保持简单。但这不太实际。下面是另一个实际有用的示例,将文档存储在磁盘上。我们假设有一个函数
fetch_documents
,它返回字符串列表,其中字符串是文档的文本内容。我们想把它们存储到
.txt
文件中。作为文件名,我们将使用内容的MD5散列。选择MD5的原因是为了保持简单。这样,我们仍然只需要“mapped”函数的一个参数,并且它足够唯一,以避免覆盖:

from assume_we_have import fetch_documents
from hashlib import md5

def store_document(contents):
    """
    Store the contents into a unique filename and return the generated filename.
    """
    hash = md5(contents)
    filename = '%s.txt' % hash.hexdigest()
    with open(filename, 'w') as outfile:
        outfile.write(contents)
    return filename


documents = fetch_documents()
stored_filenames = map(store_document, documents)
使用
map
的最后一行可以替换为:

stored_filenames = []
for document in documents:
    filename = store_document(document)
    stored_filenames.append(filename)

您可以按如下方式设置输出字符串的格式:


打印(“,”.join([%2.1f”%(.5*x如果(x%2)==0,否则3*x)用于数据中的x])

我执行此操作的最简单方法如下:

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data_list1 = []
i = 0
for i in range(len(data)):
    if (data[i]%2) == 0:
        data_list1=data_list1+[int(data[i]/2)]
    elif (data[i]%2) == 1: # alternatively a else: would do, but only if every entry in data is an int()
        data_list1=data_list1+[data[i]*3]
print(data_list1)
在您的例子中,for循环使代码更易于阅读,但是while循环也同样有效

在原始代码中,问题在于map()函数。如果查看相关文档,您会发现map()会影响iterable中的每一项。您不希望这样做,而是只希望更改指定的条目

编辑:如果出于某种原因想使用lambda,这里有一种(非常无用的)方法:

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
data_list1 = []
for i in range(len(data)):
    if (data[i] % 2) == 0:
        x = lambda a: a/2
        data_list1.append(x(data[i]))
    else:
        y = lambda a: a*3
        data_list1.append(y(data[i]))    
print(data_list1)
如果您有其他设计约束,请在问题中指定它们,以便我们提供帮助

Edit2:再一次提到漏洞:由于您添加了约束,下面介绍如何使用映射函数:

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def changer(a):
    if a%2==0:
        return a/2
    else:
        return a*3
print(list(map(changer,data)))
如果您希望它位于新列表中,只需添加
data\u list1=list(map(changer,data))


希望这就是你要找的

我推荐一些基本的调试——至少,把
print
s放进去看看发生了什么。这应该是所有数字除以2的线索。这看起来像是一个家庭作业问题。请看这篇文章:您在整个数组上使用lambda函数,因此它改变了所有内容,而不仅仅是偶数。并且您的打印仅显示所需的索引,该索引对应于中的
True
condition@DavidS哦,好吧,这很有道理,谢谢!然后我会尝试其他方法。如果我将每个元素添加到一个单独的列表中,然后加入它,我可以保留lambda吗?我知道这不是最有效的方法,但我不允许使用其他东西。更新!Idk,如果我需要使用lambda,但我尝试用math创建一个外部函数,然后执行它,但它不起作用。我真的不知道map函数的限制是什么,但是在map中执行if语句也可以吗?从java.yikes中可以做的事情中提取这些信息。。。许多打字错误(包括调用
map
)。。。他们现在都修好了:)我明白了,顺便说一句,很好的类比!那么:
map(metals,forge)
map(forge,metals)
有什么区别呢?编辑:nvm看到了更新的打字错误,一个是正确的,另一个是错误的(那就是打字错误)
map
将函数作为第一个参数。不是一个值列表。看,哇,我真的不知道它是如何工作的,但我不得不说,它的格式非常好。我已经更新了答案,将数学考虑在内:-)@RodrigoL如果你
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def changer(a):
    if a%2==0:
        return a/2
    else:
        return a*3
print(list(map(changer,data)))