标签: iterable

是否可以在不循环的情况下将 MapEntry 类型的 Iterable 转换为 Map 类型?

Dart 新手,正在尝试进入 Flutter。是否可以在不循环的情况下将 MapEntry 转换为 Map,或者使用更短的方法/更好的性能方式来实现相同的结果?

我有一个 Iterable 的返回类型,MapEntry<String, int> 如下所示。

final Map<String, int> laptopPricing = <String, int>{
  'MacM1': 120000,
  'RogFlowX13': 170000,
  'LenovoLegion': 110000
};

const int budgetOnHand = 150000;
final laptopWithinBudget = laptopPricing.entries.where((element) => element.value <= budgetOnHand); //filtering a map using entries's value

print(laptopWithinBudget); //prints (MapEntry(MacM1: 120000), MapEntry(LenovoLegion: 110000)) because the "where" method returns an Iterable MapEntry
Run Code Online (Sandbox Code Playgroud)

我想做的是将带有 MapEntry 的 Iterable 转换为一个简单的 Map,只有 Key 和 Value,集合中没有“MapEntry”,并且不使用任何类型的循环方法进行转换。(出于性能问题的考虑,只是尝试学习并看看是否可以在不使用任何循环的情况下实现)(此外,任何最佳实践/更好的方法或建议,例如“您甚至不应该使用如果你这样做的话,这是非常受欢迎的:D)

我已经设法用 map 方法实现了它(据我所知,这被认为是循环,因为它迭代集合中的所有元素,但如果我错了,请纠正我)

final returnsMapUsingLooping = Map.fromIterables(
    laptopWithinBudget.map((e) => e.key),
    laptopWithinBudget.map((e) => e.value)); …
Run Code Online (Sandbox Code Playgroud)

performance dictionary loops iterable flutter

1
推荐指数
1
解决办法
3563
查看次数

遍历列表时的Python TypeError

我正在教自己Python 3.2,我正在尝试创建一个匹配名单的程序.pList是一个多维列表,第0列为字符串,第1列为整数,第2列为布尔值.但是,每当我尝试调用此函数时(只有在列表中的行数为偶数时才会运行),我得到一个TypeError.

Traceback (most recent call last):
 File "C:\Users\METC\Dropbox\assassins.py", line 150, in <module>
main()
 File "C:\Users\METC\Dropbox\assassins.py", line 11, in main
update(ops, pList)
 File "C:\Users\METC\Dropbox\assassins.py", line 125, in update
b = match(pList)
 File "C:\Users\METC\Dropbox\assassins.py", line 47, in match
q, p = 0
TypeError: 'int' object is not iterable
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,但请记住,我是一个语言的初学者,所以要温柔.:)我不介意你是否太技术了; 我有计算机科学的经验.

def match(pList):
    b = []
    z = len(pList)-1
    for x in range(z):
        b.append([pList[x][0],0])
    for x in range(z):
        isValid = False
        q, p = 0
        while isValid == False:
            q = random.randint(0, …
Run Code Online (Sandbox Code Playgroud)

python int iterable object typeerror

0
推荐指数
1
解决办法
414
查看次数

我的可迭代的 python 实现上出现“对象不可迭代”错误

我正在尝试创建一个可迭代的类,但是可以说,我一直在用头撞墙,得到“对象不可迭代”。这是我的代码:

class myiterable:
    def __init__(self, somelist):
        self.i = 0
        self.l = somelist

    def __iter__(self):
        return self

    def __next__(self):
        if self.i < len(self.l):
            self.i = self.i + 1
            return self.l[self.i-1]
        else:
            raise StopIteration



for i in myiterable([1, 2, 3, 4, 5]):
    print(i)
Run Code Online (Sandbox Code Playgroud)

怎么了?我也尝试next(self)__next__(self)没有效果!

python iterable

0
推荐指数
1
解决办法
1万
查看次数

Python使用iterable设置更新

我手边有一个体面大小的文本文件(~23MB).我正在逐行读取文件,并根据一些外部标准从每行中提取几个单词.为了这个例子,让我们说每行包含至少六个以制表符分隔的值,除了第一个和最后一个之外,我正在接收所有这些值.

我想输出以这种方式获得的一组唯一单词,所以显然我想将提取的单词存储在一个set.此外,由于set.update(other)比循环other和一次添加一个单词要快得多set.add(elem),我尝试这样做:

all_words = set()
with open(my_tsv_file) as tsv_file:
    for line in tsv_file:
        wordlist = based_on_some_criteria(line)    # this is a list, not a set
        all_words.update(wordlist)
Run Code Online (Sandbox Code Playgroud)

这很好用.但是当我替换all_words.update(wordlist)all_words |= wordlist,我得到以下错误:

TypeError: unsupported operand type(s) for |=: 'set' and 'list'
Run Code Online (Sandbox Code Playgroud)

从文档中,我理解update并且|=是等效的.此外,因为|=应该接受任何迭代,我也通过这样做证实:

import collections
isinstance(wordlist, collections.Iterable)        # returns True
Run Code Online (Sandbox Code Playgroud)

为什么第一种方法使用set.update工作,而不是第二种方法使用|=

python iterable set

0
推荐指数
2
解决办法
776
查看次数

将int更改为Integer迭代器基本java

我正在编写一个实现迭代器的内部类,我正在尝试为我的一个方法返回一个整数,但它不会让我.我知道这是一个非常基本的问题,但我是java的新手,所以我很抱歉听起来很简单.

public class pIterator<Integer> implements Iterator<Integer>{

private int currentEx = 1; 
private int base = 4; 

//error says can't convert int to Integer here specifically 
private Integer changeToInteger = base * currentEx++;  

@Override
public boolean hasNext() {
  return currentEx <= max;  
}

//the problem then occurs here when I try to return an Integer 
@Override
public Integer next() throws NoSuchElementException {
 if (currentEx > max) throw new NoSuchElementException(); 

 return changeToInteger; 
 } 
}
Run Code Online (Sandbox Code Playgroud)

currentEx和base必须是int(由指令定义)所以我应该只更改返回类型还是可以转换为整数?

java iterator iterable

0
推荐指数
1
解决办法
247
查看次数

无法将数组隐式转换为可迭代数组

根据java文档说:

Iterable<T>允许一个对象被用作换每个语句的目标.

在java中,我们可以执行以下操作:

for (final <? super T> : T[]) {...}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,为什么java不能将T []类型的对象视为Iterable,因为以下崩溃时出现了不可比较的类型编译错误:

final Iterable<T> anIterable = T[];
Run Code Online (Sandbox Code Playgroud)

java arrays foreach iterable

0
推荐指数
1
解决办法
32
查看次数

(在Python中)list(string).reverse()和list(string)[:: - 1]之间有什么区别?

我可以在Python shell中执行这两个表达式而不会出错:

string ='this is a string'list
(string)[:: - 1]

(输出)['g','n','i','r','t','s','','a','','s','i','',' s','i','h','t']

list(字符串).reverse()

我可以:

string =''.join(list(string)[:: - 1])

这有效地扭转了弦.但是,当我这样做时:

string =''.join(list(string).reverse()

我收到一个错误:

TypeError:只能加入一个iterable

所以list(string).reverse()不返回可迭代但是list(string)[:: - 1].有人能帮我理解潜在的差异吗?

python iterable list

0
推荐指数
1
解决办法
64
查看次数

有没有办法在 Python 中没有 for 循环的情况下将可迭代对象中的所有元素添加到列表中?

是否有一种更 Pythonic 的方式(即在一行中,没有循环,也没有简单的初始化)来计算all下面的列表?

all = []
for iterable in iterables:
    all.extend(iterable)  # add all elements in 'iterable' to 'all'
Run Code Online (Sandbox Code Playgroud)

编辑:如果解决方案需要线性时间就可以了。我只是想要一种更易读、更短、更直接的方式。

python iterable list

0
推荐指数
1
解决办法
43
查看次数

可迭代和可下标有什么区别?是否有任何对象仅属于这些对象类型之一?

可下标对象和可迭代对象有什么区别?什么是可下标但不可迭代的对象,反之亦然?

Ps 可下标的是其中包含其他对象的对象,迭代器是可下标的,可以迭代。但我能想到的也仅此而已。

python types iterable object python-3.x

0
推荐指数
1
解决办法
934
查看次数

Iterable <String>到Iterable <T>

重写的方法想要返回,Iterable<T>但在我拥有的方法中Iterable<String>.我怎样才能返回Iterable<T>Iterable<String>,甚至Set<String>

码:

@Override
public Iterable<T> getAll() {
   Set<String> set = getCache().keySet();
   Iterable<String> iter = set;
   return ?
}
Run Code Online (Sandbox Code Playgroud)

java generics iterable

-2
推荐指数
1
解决办法
531
查看次数

Java 中单个元素转换为 Iterable

在 C# 中,我可以将单个元素转换为IEnumerable<>如下所示(此处使用扩展方法):

static class Extensions
{
    static IEnumerable<T> Yield<T>(this T t)
    {
        yield return t;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我需要在IEnumerable<>某处输入但只有一个元素时,我会使用它,如下所示:

var myList = new List<string>("foo".Yield());
Run Code Online (Sandbox Code Playgroud)

在 Java 中是否有一些等效的方法可以做到这一点?

Iterable<>我对从像这样的元素实际创建堆上不感兴趣

List<String> myIterable = new ArrayList<String>();
myIterable.add("foo");
Run Code Online (Sandbox Code Playgroud)

因为我已经知道那种解决方案;我想知道 Java 是否可以像 C# 一样强大且惰性地处理可枚举/可迭代(C# 有 Linq 和 Yield Return,Java 有 Streams)。

c# java iterable enumerable

-2
推荐指数
1
解决办法
458
查看次数

这句话(line,str)= str.split("\n",1)是什么意思?

我熟悉这个split功能,我会这样使用它:

str = "Line1-abcdef \nLine2-abc \nLine4-abcd"
print str.split( )
Run Code Online (Sandbox Code Playgroud)

以上将返回:

['Line1-abcdef', 'Line2-abc', 'Line4-abcd']
Run Code Online (Sandbox Code Playgroud)

简单易行.但是,我遇到了一段包含此声明的代码:

(line, str) = str.split("\n", 1)
Run Code Online (Sandbox Code Playgroud)

这里有两件事我不明白:

  1. 第二个参数split和它的作用.我看了看这里,它说的是行数.那是什么意思?

  2. split返回一个可迭代的向量.为什么要分配(line, str)(line, str)这里的意思是什么?

python string iterable

-3
推荐指数
1
解决办法
850
查看次数

Python - 在迭代字典列表时如何处理丢失的键?

在下面的示例中,我迭代字典列表,并将“年龄”保存在列表中。然而,第二个字典没有键“年龄”。在这种情况下,我希望将 null 值保存在列表中。关于如何实现这一目标有什么建议吗?

my_list = [{'age': 0, 'name': 'A'}, {'name': 'B'}, {'age': 2, 'name': 'C'}, {'age': 3, 'name': 'D'}, {'age': 4, 'name': 'E'}, {'age': 5, 'name': 'F'}]

ages = [li['age'] for li in my_list] 
Run Code Online (Sandbox Code Playgroud)

python dictionary iterable python-3.x

-4
推荐指数
1
解决办法
880
查看次数